返回400个未命中控制器的请求的自定义错误消息

时间:2014-05-28 19:49:38

标签: java spring http-status-code-400

我需要能够为不良请求的请求返回自定义错误消息,但不要命中控制器(例如,使用错误的JSON)。有谁知道如何去做这件事?我试过@ExceptionHandler注释无济于事。

任何帮助都将不胜感激。

1 个答案:

答案 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的形式返回。