我已经编写了 ExceptionHandlerExceptionResolver 的一些扩展,它拦截了它应该拦截的所有异常,但是它不是只返回错误消息和 HTTP 状态代码,而是通过它自己的基于用户请求的 URL 构建的 URL 进行非常奇怪的重定向。例如:
user's url -> .../myModule/api/myEntity/123 (it's an id)
resolver's redirect url -> .../myModule/api/myEntity/myEntity/123
服务器没有这样的资源,显然它会以 404 响应。
问题是:为什么要进行重定向以及如何将其配置为仅返回消息和状态码?
我的解析器:
public class BusinessLayerExceptionHandler extends ExceptionHandlerExceptionResolver {
@Override
public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
ModelAndView wrappedResponse = new ModelAndView();
wrappedResponse.addObject("errorMessage", ex.getMessage());
wrappedResponse.setStatus(HttpStatus.BAD_REQUEST);
return wrappedResponse;
}
}
ModelAndView
我猜假设重定向的用法。至少这是我在 DispatcherServlet 中找到的方法描述。
...
* @return a corresponding ModelAndView to forward to
* @throws Exception if no error ModelAndView found
*/
protected ModelAndView processHandlerException(HttpServletRequest request, HttpServletResponse response,
Object handler, Exception ex) throws Exception {
...
如果是这样,如何让它只返回错误消息和 HTTP 状态码?