使用spring的控制器中的数据绑定抛出异常

时间:2016-06-24 04:11:15

标签: spring jackson

我有一个带有方法参数的控制器,如模型说

public Response create(Customer customer){
   }

客户模式:客户模型看起来像

  @JsonTypeInfo(  use = JsonTypeInfo.Id.NAME,property = "type")  
 @JsonSubTypes({@Type(value = Config.class, name = "IPC")}) 
 public class Customer(){
 private String type; }
  1. 从swagger UI中,如果我发送类型作为IPC它工作正常,但IPC之外的任何其他值在绑定时抛出400异常。如何在控制器内捕获此异常

1 个答案:

答案 0 :(得分:0)

尝试使用@ExceptionHandler注释

Spring 4(http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#mvc-ann-exceptionhandler)的文档指出

  

HandlerExceptionResolver接口和   SimpleMappingExceptionResolver实现允许您映射   特定视图的异常以声明方式与一些可选视图一起使用   转发到那些视图之前的Java逻辑。但是,在某些情况下,   特别是在依赖@ResponseBody方法而不是视图时   分辨率,直接设置状态可能更方便   响应并可选择将错误内容写入主体   响应。

     

您可以使用@ExceptionHandler方法执行此操作。在a。中声明   控制器这样的方法适用于@RequestMapping引发的异常   该控制器(或其任何子类)的方法。你也可以   在@ControllerAdvice类中声明一个@ExceptionHandler方法   在这种情况下,它处理来自@RequestMapping方法的异常   很多控制器。以下是控制器本地的示例   @ExceptionHandler方法:

因此,在您的控制器中,您可以使用这样的方法

@ExceptionHandler(MethodArgumentNotValidException.class)
public String handleArgumentNotValid(MethodArgumentNotValidException e, ModelMap map, HttpServletRequest request) {
    List<ObjectError> errors = e.getBindingResult() .getAllErrors();
    //you can get the exception e,
    //you can get the request
    //handle whatever you want the then return to view 

    return "your view that you will handle the exception";
}