Spring MVC 使用Autowired Text Processor抛出HTTPMessageConverter

vbopmzt1  于 2023-10-24  发布在  Spring
关注(0)|答案(1)|浏览(152)

我想创建一个运行时异常,设置HTTP状态和文本。有一个textService创建文本。
我读了那么多的帖子,但还是不明白。
我不能像这样在构造函数中使用autowired textService:

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

因为在构造时我没有autorwired对象。这是可以理解的。在我读到的一些线程中,我应该覆盖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中,所以我不能直接访问响应对象。
使用Spring WebMVC 4.3.4.RELEASE.
我有其他想法(但没有找到工作):

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

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

最有可能的解决办法是在某个地方,但我显然是盲目的,所以也许一些友好的人可能会打开我的眼睛。

wsxa1bj1

wsxa1bj11#

尝试使用@ControllerAdvice@ExceptionHandler结合使用。
例如

@ControllerAdvice
public class ExceptionHandlerClass {

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

}

相关问题