我想创建一个运行时异常,设置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中抛出一个新的异常
- 以某种方式访问类的原因注解
我读过的主题(以及更多)
- How to set my own message in my custom exception in Java that can be retrieved my getMessage() BUT WITHOUT using the constructor, is there any way?
- Spring passsing autowired object to class constructor
- how to set message to a custom exception class without setting through super constructor in java
- In Spring 3 is it possible to dynamically set the reason of @ResponseStatus?
- Dynamic message for custom exception annotated as ResponseStatus
最有可能的解决办法是在某个地方,但我显然是盲目的,所以也许一些友好的人可能会打开我的眼睛。
1条答案
按热度按时间wsxa1bj11#
尝试使用
@ControllerAdvice
与@ExceptionHandler
结合使用。例如