gpt4 book ai didi

java - 使用自动连线文本处理器抛出 HTTPMessageConverter

转载 作者:行者123 更新时间:2023-12-02 11:09:16 24 4
gpt4 key购买 nike

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

看了很多帖子,还是没明白。

我不能像这样在构造函数中使用 Autowiring 的 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");

我收到一个错误页面,其状态正确,但没有文本。

这不是发生在 Controller 中,而是发生在 HTTPMessageConverter 中,所以我无法直接访问响应对象。

使用 Spring WebMVC 4.3.4.RELEASE。

我有的其他想法(但没有想到可行):

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

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

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

最佳答案

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

例如

@ControllerAdvice公共(public)类 ExceptionHandlerClass {

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

}

关于java - 使用自动连线文本处理器抛出 HTTPMessageConverter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50717670/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com