在Spring中实现一个全局异常处理程序时,我注意到如果没有识别出Accept标头,Spring会抛出它自己的内部错误。我需要的是返回一个自定义的JSON错误结构。适用于特定于应用程序的异常,并且对于Spring HttpMediaTypeNotAcceptableException完全失败。
当我尝试请求具有不正确的Accept标头的页面时,此代码告诉我“无法调用@ExceptionHandler方法:public java.util.Map RestExceptionHandler.springMalformedAcceptHeaderException()”。还有其他方法可以为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;
}
}
答案 0 :(得分: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";
}