使用自动文本处理器抛出HTTPMessageConverter

时间:2018-06-06 10:04:49

标签: java spring spring-mvc

我想创建一个设置HTTP状态和文本的RuntimeException。有一个textService可以创建文本。

我阅读了很多主题,但仍然没有得到它。

我无法在构造函数中使用自动装配的textService,如下所示:

    @Autowired
    public myException(String param) {
        this.param = ts.getMsg(param);
    }

因为在施工时间我没有自动对象。这是可以理解的。在一些线程中我读到我应该覆盖getMessage函数,这对我来说似乎很合乎逻辑并导致以下结果:

@ResponseStatus(value = HttpStatus.UNAUTHORIZED)
public class myException extends RuntimeException {

    @Autowired
    private transient textService ts;

    private String param = "default";

    public myException(String param) {
        this.param = param;
    }

    @Override
    public String getMessage() {
        return ts.getMsg(param);
    }

}

但扔的时候

throw new myException("foo");

我得到一个状态正确但没有文字的错误。

这不是在控制器中发生的,而是在HTTPMessageConverter btw中发生的,所以我不能直接访问响应对象。

使用Spring WebMVC 4.3.4.RELEASE。

我有其他想法(但没有找到工作):

  • 在@ PostContruct-Method
  • 中抛出一个新的异常
  • 以某种方式访问​​类
  • 的原因注释

我读过的主题(以及更多内容)

很可能解决方案在某个地方,但我显然是盲目的,所以也许一些友善的人可能会睁开我的眼睛。

1 个答案:

答案 0 :(得分:1)

尝试使用@ControllerAdvice并与@ExceptionHandler结合使用。

e.g。

@ControllerAdvice 公共类ExceptionHandlerClass {

@ResponseStatus(value = HttpStatus.UNAUTHORIZED)
@ExceptionHandler(myException.class)
public ResponseEntity<String> handlerMyException(myException me) {
    return new ResponseEntity(me.getMessage(), HttpStatus.UNAUTHORIZED);
}

}