我想创建一个设置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。
我有其他想法(但没有找到工作):
我读过的主题(以及更多内容)
很可能解决方案在某个地方,但我显然是盲目的,所以也许一些友善的人可能会睁开我的眼睛。
答案 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);
}
}