扩展 RepositoryRestExceptionHandler
Extend RepositoryRestExceptionHandler
我想扩展 RepositoryRestExceptionHandler 来处理我的 RestController 中的错误。
我有验证器并且在使用 RestRepository 时工作得很好但是当我使用 RestController 时它们不是所以我做了如下手动验证
Errors errors = new BeanPropertyBindingResult(NumberRange, "range");
NumberRangeValidator.validate(NumberRange, errors);
if(errors.hasErrors()) {
throw new RepositoryConstraintViolationException(errors);
}
这会导致错误 500,我想要的结果与 400 错误请求相同,但正文中列出了错误。
我想我应该扩展下面的 class 来处理来自我的休息控制器的异常
@ControllerAdvice(basePackageClasses = RepositoryRestExceptionHandler.class)
public class RepositoryRestExceptionHandler { .... }
我试图避免创建与 RepositoryRestExceptionHandler 完全相同的 ControllerAdvice
谢谢
RepositoryRestExceptionHandler 仅限于其自身包中的控制器 - 这基本上意味着它仅在调用 spring 数据其余控制器 (RepositoryEntityController) 时应用。
所以我会尝试扩展 RepositoryRestExceptionHandler 并使用包含应适用的控制器的包来注释您的子类:
@ControllerAdvice(basePackages="com.my.package")
这样您就不会更改 spring 数据剩余的异常处理行为,并确保您只是增强了控制器方法的错误处理。
我刚刚试过了 - 所以我的自定义控制器(用 @RepositoryRestController
注释)包含一个抛出 RepositoryConstraintViolationException
的方法。 spring 数据剩余异常处理程序 RepositoryRestExceptionHandler
将此异常转换为 BAD_REQUEST (400)。
但这不适用于我的自定义控制器方法 - 我得到 INTERNAL_SERVER_ERROR (500)。
所以我扩展了 RepositoryRestExceptionHandler
并注释了我的控制器建议,因此它只适用于我的控制器的包:
@ControllerAdvice(basePackageClasses = DefaultExceptionHandler.class)
public class DefaultExceptionHandler extends RepositoryRestExceptionHandler {
@Autowired
public DefaultExceptionHandler(MessageSource messageSource) {
super(messageSource);
}
}
有了这个 ControllerAdvice,我收到一个 BAD_REQUEST 400 - 所以这按预期工作。
我想扩展 RepositoryRestExceptionHandler 来处理我的 RestController 中的错误。
我有验证器并且在使用 RestRepository 时工作得很好但是当我使用 RestController 时它们不是所以我做了如下手动验证
Errors errors = new BeanPropertyBindingResult(NumberRange, "range");
NumberRangeValidator.validate(NumberRange, errors);
if(errors.hasErrors()) {
throw new RepositoryConstraintViolationException(errors);
}
这会导致错误 500,我想要的结果与 400 错误请求相同,但正文中列出了错误。
我想我应该扩展下面的 class 来处理来自我的休息控制器的异常
@ControllerAdvice(basePackageClasses = RepositoryRestExceptionHandler.class)
public class RepositoryRestExceptionHandler { .... }
我试图避免创建与 RepositoryRestExceptionHandler 完全相同的 ControllerAdvice
谢谢
RepositoryRestExceptionHandler 仅限于其自身包中的控制器 - 这基本上意味着它仅在调用 spring 数据其余控制器 (RepositoryEntityController) 时应用。
所以我会尝试扩展 RepositoryRestExceptionHandler 并使用包含应适用的控制器的包来注释您的子类:
@ControllerAdvice(basePackages="com.my.package")
这样您就不会更改 spring 数据剩余的异常处理行为,并确保您只是增强了控制器方法的错误处理。
我刚刚试过了 - 所以我的自定义控制器(用 @RepositoryRestController
注释)包含一个抛出 RepositoryConstraintViolationException
的方法。 spring 数据剩余异常处理程序 RepositoryRestExceptionHandler
将此异常转换为 BAD_REQUEST (400)。
但这不适用于我的自定义控制器方法 - 我得到 INTERNAL_SERVER_ERROR (500)。
所以我扩展了 RepositoryRestExceptionHandler
并注释了我的控制器建议,因此它只适用于我的控制器的包:
@ControllerAdvice(basePackageClasses = DefaultExceptionHandler.class)
public class DefaultExceptionHandler extends RepositoryRestExceptionHandler {
@Autowired
public DefaultExceptionHandler(MessageSource messageSource) {
super(messageSource);
}
}
有了这个 ControllerAdvice,我收到一个 BAD_REQUEST 400 - 所以这按预期工作。