【问题标题】:SpringMvc doesn't handle exceptionSpringMvc 不处理异常
【发布时间】:2017-08-31 06:33:32
【问题描述】:

我在我的休息控制器中定义了注释@ExceptionHandler,但是当我将结果类型标记为文本/纯文本时,它并没有像我希望的那样工作,该方法被定义为处理附加上传请求。 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());
  }
}

【问题讨论】:

    标签: java spring-mvc file-upload


    【解决方案1】:

    由于没有人有兴趣回答这个问题,我必须自己解决。 我发现异常处理程序会寻找正确的转换器来处理定义为@ExceptionHandler 的返回值的异常结果。在我的控制器中,异常是pojo,当我调试程序时,我发现没有转换器可以将pojo写入“text/plain”,所以SpringMvc将原始异常抛出到servlet容器,并返回错误页面由码头。

    【讨论】:

      【解决方案2】:

      您应该遵循以下提示:

      1.你应该定义一个自定义的异常, 但它必须扩展 Exception.class;

      2.设置全局异常处理程序,dao将异常抛给service,service抛给controller,然后controller使用try...catch..代码块解决;

      3.a bean应该配置在SpringMVC.xml中 像这样:

      4.仅此而已,您可以使用一些简单的代码来测试它,例如 1/0;

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-11-23
        • 1970-01-01
        • 2018-07-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多