现在,我在Spring 4中使用@ControllerAdvice。*。 使用beforeBodyWrite方法。
在控制器类中创建自定义注释。 在@ControllerAdvice处理时获取控制器的信息。
我想知道来自控制器类的请求。
但是,我不知道解决方案。
任何帮助。?
感谢
答案 0 :(得分:0)
虽然您的问题没有明确说明您要达到的目的是什么,为什么需要创建自定义注释,但我会向您发布一些指导原则,说明如何确定RuntimeException
的来源在ControllerAdvice
给出以下Rest控制器:
@RestController
public class CARestController {
@RequestMapping(value = "/test", method = RequestMethod.GET)
public String testException() {
throw new RuntimeException("This is the first exception");
}
}
@RestController
public class CAOtherRestController {
@RequestMapping(value = "/test-other", method = RequestMethod.GET)
public String testOtherException() {
throw new RuntimeException("This is the second exception");
}
}
两者都抛出异常,我们可以使用以下ControllerAdvice
捕获此异常,并使用堆栈跟踪确定异常的来源。
@ControllerAdvice
public class CAControllerAdvice {
@ExceptionHandler(value = RuntimeException.class)
protected ResponseEntity<String> handleRestOfExceptions(RuntimeException ex) {
return ResponseEntity.badRequest().body(String.format("%s: %s", ex.getStackTrace()[0].getClassName(), ex.getMessage()));
}
}
这是端点输出的外观:
我的建议是,不是这样做,而是声明自己的一组异常,然后在控制器建议中捕获它们,并且独立于它们被抛出的位置:
public class MyExceptions extends RuntimeException {
}
public class WrongFieldException extends MyException {
}
public class NotFoundException extends MyException {
}
@ControllerAdvice
public class CAControllerAdvice {
@ExceptionHandler(value = NotFoundException .class)
public ResponseEntity<String> handleNotFound() {
/**...**/
}
@ExceptionHandler(value = WrongFieldException .class)
public ResponseEntity<String> handleWrongField() {
/**...**/
}
}