Spring MVC Controller中的一个读入和返回都是JSON的方法如何获取javax.validation注解的异常信息
Spring MVC Controller中的一个读入和返回都是JSON的方法怎么获取javax.validation注解的错误信息?
标题可能有点绕,看代码就明白了:
这是我的User类:
我的Controller的方法之一是这样写的:
addUser方法读入和输出都是JSON。
问题是:我能不能在addUser方法中获取User类的validation注解中定义的message信息并以JSON返回?
------解决方案--------------------
这个当然可以了。你需要使用 HandlerExceptionResolver。
然后 spring 注入:
标题可能有点绕,看代码就明白了:
这是我的User类:
import org.hibernate.validator.constraints.NotBlank;
import org.hibernate.validator.constraints.Range;
public class User {
private int id;
private String name;
private int age;
private String address;
public User() {
}
public User(String name) {
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@NotBlank(message = "请输入姓名")
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Range(min = 0, max = 200, message = "请输入真实年龄")
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@NotBlank(message = "请输入住址")
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
我的Controller的方法之一是这样写的:
@ResponseBody
@RequestMapping(value = "action/add", method = RequestMethod.POST)
public Object addUser(@RequestBody @Validated User user/*, BindingResult bindingResult*/) {
/*if(bindingResult.hasErrors() {
return message;
*/
userService.saveUser(user);
return user;
}
addUser方法读入和输出都是JSON。
问题是:我能不能在addUser方法中获取User类的validation注解中定义的message信息并以JSON返回?
------解决方案--------------------
这个当然可以了。你需要使用 HandlerExceptionResolver。
public class BaseExceptionHandler implements HandlerExceptionResolver {
@Override
public ModelAndView resolveException(HttpServletRequest request,
HttpServletResponse response, Object handler, Exception ex) {
response.setStatus(HttpStatus.BAD_REQUEST.value());//返回 400 错误
if (ex instanceof BaseException) {//自定�?RtuploadException,直接返�?
return JsonView.Render(ex, response);
} else {//非自定义 RtuploadException,返回新 RtuploadException 实例
return JsonView.Render(new BaseException(GlobalConstant.ERROR_CODE_9000), response);
}
}
}
然后 spring 注入:
<bean id="baseExceptionHander" class="com.defonds.cloud.common.exception.BaseExceptionHandler"></bean>