我需要能够为不良请求的请求返回自定义错误消息,但不要命中控制器(例如,使用错误的JSON)。有谁知道如何去做这件事?我试过@ExceptionHandler注释无济于事。
任何帮助都将不胜感激。
答案 0 :(得分:4)
从Spring 3.2开始,你可以像这样添加一个ControllerAdvice
import org.springframework.http.HttpStatus;
import org.springframework.http.converter.HttpMessageNotReadableException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.ResponseStatus;
@ControllerAdvice
public class BadRequestHandler {
@ResponseStatus(HttpStatus.OK)
@ExceptionHandler(HttpMessageNotReadableException.class)
@ResponseBody
public ErrorBean handleHttpMessageNotReadableException(HttpMessageNotReadableException e) {
ErrorBean errorBean = new ErrorBean();
errorBean.setMessage(e.getMessage());
return errorBean;
}
class ErrorBean {
private String message;
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
}
在使用handleHttpMessageNotReadableException
注释的@ExceptionHandler(HttpMessageNotReadableException.class)
中,您可以处理异常并呈现自定义响应。在这种情况下,将填充ErrorBean并返回到客户端。如果类路径上有Jackson
,客户端将Content-Type
设置为application/json
,则此ErrorBean将以json的形式返回。