发表于: 2020-09-27 18:47:17
3 1453
今天完成的:
修改了上次的validation,用包装类包装返回信息。在controller中,不管是业务成功,业务失败还是校验失败,都是返回自定义的response对象。
参考的文档:http://dwz.date/cDQx (短网址。。。)
1、定义成功失败的返回码
public class Code {
/**
* 成功
*/
public static int SUCCESSED = 1;
/**
* 失败
*/
public static int FAILED = -1;
}
2、定义返回信息的包装类
@Data
public class Response<T> {
/**
* 返回结果集
*/
private T result;
/**
* 返回消息
*/
private String msg;
/**
* 响应码
*/
private Integer code;
}
3、修改controller的逻辑
/******************* 增 ************************/
@PostMapping(value = "/books")
@ResponseBody
public String addBook(@RequestBody @Validated Book book, BindingResult results){
// 定义自定义返回信息的对象
Response response = new Response();
Gson gson = new Gson();
if (results.hasErrors()) {
// 获得校验失败的信息
List<ObjectError> errors = results.getAllErrors();
ArrayList<String> errorsList = new ArrayList<>();
errors.forEach(o -> {
errorsList.add(o.getDefaultMessage());
});
// 返回包含校验错误信息的response对象的json
response.setCode(Code.FAILED);
response.setMsg("Validate failed");
response.setResult(errorsList);
return gson.toJson(response);
}
if (bookService.add(book)) {
// 如果添加成功,就返回成功的json
response.setCode(Code.SUCCESSED);
response.setMsg("add book successed");
return gson.toJson(response);
}
// 失败,就返回失败的json
response.setCode(Code.FAILED);
response.setMsg("add book failed");
return gson.toJson(response);
}
当校验失败时,把错误信息装进一个列表,然后赋给response的result字段。
用postman测试。
编号、书名、摘要为空字符串时,可以返回相应的错误信息。
正常数据,可以添加成功。
id重复,添加失败。
明天计划的:
看看springboot
遇到的问题:
包装类里如果包含中文,返回的json不能显示中文。但是之前用jsontaglib的时候是可以显示中文的。
做的时候,以为是要做一个全局的错误处理类,尝试了几次失败了。然后反应过来师兄应该不是这个意思。。。。
收获:
了解了包装类的思想。
评论