背景
公司的一个项目,没有统一接口返回值。前端对接接口时,由于不同接口返回对象的千差万别,导致抽象处理接口返回结果很复杂。
有的公司,会新增一个统一返回对象,每一个接口,都返回这个对象。这样是可以实现的,很多公司也是这么做的,但是对代码有一定的入侵性。
这里用另一个思路来实现:
- 程序异常返回时,通过异常拦截,捕捉异常来构造统一返回对象
- 程序正常返回时,自定义返回值处理器来实现统一处理返回值的功能。
对于一个新手来说,接口返回值很随意,下面这样写接口是很常见的:
@RequestMapping("getAll")
public List<GoodJobEveryDay> getAll() throws JsonProcessingException {
List<GoodJobEveryDay> value = new ArrayList<>();
// 判断文件是否存在
if (FileHandling.isFileExists(FileHandling.FILE_NAME)) {
// 如果文件存在,读取文件内容
String fileContent = FileHandling.readFileContent(FileHandling.FILE_NAME);
value = objectMapper.readValue(fileContent, new TypeReference<List<GoodJobEveryDay>>() {
});
}
return value;
}
@GetMapping("getOne")
public GoodJobEveryDay getOne(@RequestParam Integer id) throws JsonProcessingException {
List<GoodJobEveryDay> value = getAll();
if (!CollectionUtils.isEmpty(value)) {
if (value.stream().filter(it -> id.equals(it.getId())).count() <= 0) {
throw new BusinessException(ExceptionEnum.DATA_NOT_FOUND);
}
Optional<GoodJobEveryDay> first = value.stream().filter(it -> it.getId().equals(id)).findFirst();