我在我的其余控制器中定义了注释@ExceptionHandler,但是当我将结果类型标记为text / plain时,它不能正常工作,该方法被定义为处理附加上载请求。 SpringMvc只是把我的业务异常抛给了servlet容器。这是SpringMVC的一个bug吗?我该如何修复它?
@RestController
@RequestMapping("/api/test")
public class TestController extends BasicController{
@RequestMapping(value="/uploadAttach", headers = ("content-type=multipart/*"),method = RequestMethod.POST,produces="text/plain")
public String test(){
throw new ServiceException("biz exception");
}
@ExceptionHandler(value = {ServiceException.class})
@ResponseStatus(HttpStatus.BAD_REQUEST)
public @ResponseBody StatusMessage serviceError(ServiceException ex) {
return new StatusMessage(ex.getMessage());
}
}
答案 0 :(得分:0)
由于没有人有兴趣回答这个问题,我必须自己解决。 我发现异常处理程序将寻找正确的转换器来处理异常结果,该异常结果被定义为@ExceptionHandler的返回值。在我的控制器中,异常是一个pojo,当我调试程序时,我发现没有转换器可以写pojo来键入“text / plain”,所以SpringMvc将原始异常抛给servlet容器,并返回一个错误页面由Jetty。
答案 1 :(得分:0)
您应该遵循以下提示:
1.您应该定义一个自定义的例外, 但它必须扩展Exception.class;
2.设置一个全局异常hadler,并且dao将异常抛出到服务,服务抛出到控制器,然后控制器使用try ... catch ..代码块来解决它;
3.应在SpringMVC.xml中配置bean 像这样:
4.就是这样,你可以使用一些简单的代码来测试它,比如1/0;