2016-03-10 7 views
0

Мое требование - получить ответ json с настраиваемым сообщением об ошибке, когда требуемый @RequestParam не отправляется обработчику запроса или недействительный параметр (обязательно int, а пользователь передает строку) отправляется на обработчик запроса.REST Обработка неправильного параметра и требуемого параметра

В настоящее время я пытаюсь использовать механизм @Exceptionhandler для обработки этих исключений. Но соответствующие методы обработчика исключений не вызываются.

Пожалуйста, смотрите фрагмент кода:

@Controller 
@RequestMapping("api/v1/getDetails") 
public class Abc { 


@RequestMapping 
@ResponseBody 
public Envelope<Object> retrieveTransactions(@RequestParam(required = false) Integer a, 
     @RequestParam int b, @RequestParam(required = false) boolean c, 
     HttpServletRequest req) {` 
//implementation goes here 
} 

@ExceptionHandler(MissingServletRequestParameterException.class) 
@ResponseBody 
public Envelope<Object> missingParameterExceptionHandler(Exception exception, 
     HttpServletRequest request) { 
    Envelope<Object> envelope = null; 
    //error implementation 
    return envelope; 
} 

@ExceptionHandler(TypeMismatchException.class) 
@ResponseBody 
public Envelope<Object> typeMismatchExpcetionHandler(Exception exception, HttpServletRequest request) { 
    Envelope<Object> envelope = null; 
    //error implementation 
    return envelope; 

} 

Мне нужно настроить что-либо дополнительное для обработчика исключений делать? может кто-нибудь сказать мне, где я поступаю неправильно.

ответ

0

Вы пытались использовать MethodArgumentNotValidException или HttpMessageNotReadableException вместо этого на своих обработчиках?

И положил required = true на вашу декларацию @RequestParam поймать недостающий Params исключение

@RequestParam(required = true) 
0

Рассматривает определение имени параметра в RequestParameter аннотации. Например

@RequestParam(value="blammy", required=false) 

Я никогда не потрудился выяснить, как обрабатывать несоответствие типов, вместо этого я нашел, что это легче принять все параметры как строки и выполнять все верификации себя (в том числе типа).

Кроме того, Если вы принимаете HttpServletRequest в качестве параметра обработчика, , то нет никакой необходимости использовать @RequestParam аннотации, просто получить значение параметров непосредственно из запроса.

Наконец, считают org.springframework.web.context.request.WebRequest или org.springframework.web.context.request.NativeWebRequest вместо HttpServletRequest.

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