2016-06-24 1 views
0

У меня есть контроллер с параметром метода в качестве модели говорятDatabinding в контроллер с помощью пружины бросает исключение

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. От развязность UI, если я отправить типа, поскольку IPC работает отлично, но любое другое значение, чем IPC, выдает исключение 400 при привязке. Как я могу поймать это исключение внутри контроллера

ответ

0

попытаться использовать @ExceptionHandler аннотацию

в документации Spring 4 (http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#mvc-ann-exceptionhandler) утверждает, что

Интерфейс HandlerExceptionResolver и реализации SimpleMappingExceptionResolver позволяют отобразить Исключения конкретных взглядов декларативно наряду с некоторые необязательные Java-логика перед пересылкой на эти виды. Однако в некоторых случаях , особенно если полагаться на методы @ResponseBody, а не на вид , может быть более удобно непосредственно установить статус ответа и, возможно, записать содержимое ошибки в тело ответа .

Вы можете сделать это с помощью методов @ExceptionHandler. При объявлении в контроллере такие методы применяются к исключениям, вызванным методами @RequestMapping этого контроллера (или любого из его подклассов). Вы также можете объявить метод @ExceptionHandler в классе @ControllerAdvice , и в этом случае он обрабатывает исключения из методов @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"; 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^