我知道Spring Boot会在error/409.html中为一个异常呈现一个胸腺叶模板,默认情况下会导致状态码409冲突。但是,默认情况下,ObjectOptimisticLockingFailureException似乎给出了一个500服务器错误。
我能够处理这个异常,并使用如下的@ControllerAdvice“手动”重定向到error/409.html模板:
@ControllerAdvice
public class GlobalControllerAdvice {
@ResponseStatus(HttpStatus.CONFLICT)
@ExceptionHandler({DataIntegrityViolationException.class, ObjectOptimisticLockingFailureException.class})
public ModelAndView handleConflict(HttpServletRequest request, Exception e) {
ModelAndView result = new ModelAndView("error/409");
result.addObject("url", request.getRequestURL());
return result;
}
}因为ObjectOptimisticLockingFailureException不是我自己代码的一部分,所以我不能用@ResponseStatus(HttpStatus.CONFLICT)注释它,使其具有409。
是否可以将ObjectOptimisticLockingFailureException映射到409,并对Spring Boot中的错误代码使用默认的错误模板机制?
发布于 2020-08-15 21:11:57
我们可以尝试使用ResponseEntity,如下所示
@ExceptionHandler({DataIntegrityViolationException.class, ObjectOptimisticLockingFailureException.class})
public ResponseEntity<ModelAndView> handleConflict(HttpServletRequest request, Exception e) {
ModelAndView result = new ModelAndView("error/409");
result.addObject("url", request.getRequestURL());
return new ResponseEntity<>(result, HttpStatus.CONFLICT);
}发布于 2020-08-16 08:38:52
这可能行得通
@Bean(name="simpleMappingExceptionResolver")
public SimpleMappingExceptionResolver
createSimpleMappingExceptionResolver() {
SimpleMappingExceptionResolver r =
new SimpleMappingExceptionResolver();
Properties mappings = new Properties();
mappings.setProperty("ObjectOptimisticLockingFailureException", "error/409");
r.setExceptionMappings(mappings);
return r;
}https://stackoverflow.com/questions/63418088
复制相似问题