1

在 Spring 中实现全局异常处理程序时,我注意到如果出现无法识别的 Accept 标头,Spring 会抛出它自己的内部错误。我需要的是返回一个自定义的 JSON 错误结构。适用于特定于应用程序的异常,但对于 Spring HttpMediaTypeNotAcceptableException 完全失败。

这段代码告诉我“无法调用 @ExceptionHandler 方法:public java.util.Map RestExceptionHandler.springMalformedAcceptHeaderException()”,当我尝试请求带有不正确的 Accept 标头的页面时。有没有其他方法可以为 spring 内部异常返回自定义 JSON?

@ControllerAdvice
public class RestExceptionHandler {

    @ExceptionHandler(value = HttpMediaTypeNotAcceptableException.class)
    @ResponseBody
    public Map<String, String> springMalformedAcceptHeaderException() {

         Map<String, String> test = new HashMap<String, String>();
         test.put("test", "test");
         return test;
     }
} 
4

1 回答 1

0

最终发现唯一的方法是手动进行 json 映射。

@ExceptionHandler(value = HttpMediaTypeNotAcceptableException.class)
@ResponseBody
public String springMalformedAcceptHeaderException(HttpServletResponse response) {
    // populate errorObj, set response headers, etc
    ObjectWriter jsonWriter = new ObjectMapper().writer();
    try {
        return  jsonWriter.writeValueAsString(errorObj);
    } catch(Exception e){}
    return "Whatever";
}
于 2014-11-11T23:21:03.127 回答