gpt4 book ai didi

Spring3 @ExceptionHandler 用于 ServletRequestBindingException

转载 作者:行者123 更新时间:2023-12-05 00:38:52 25 4
gpt4 key购买 nike

我正在使用默认 AnnotationMethodHandlerAdapter,我认为它应该启用对@ExceptionHandler 的支持。不幸的是,如果调用如下所示的处理程序方法,则会抛出 ServletRequestBindingException - 而不是调用 Exception 处理程序。

@RequestMapping(value = "/v1/products/{code}", method = RequestMethod.GET, headers = "Accept=application/xml,application/json")
@ResponseBody
public ProductDemoDTO getProductByCode(@PathVariable final String code,
@RequestParam(required = false, defaultValue = "BASIC") final String options)
{
//omitted
}

这里是 ExceptionHandler,从未调用过:
@ExceptionHandler(Throwable.class)
@ResponseBody
@ResponseStatus(value = HttpStatus.BAD_REQUEST)
//TODO not being called?
public void handleException(final Exception e, final HttpServletRequest request, final Writer writer) throws IOException
{
writer.write(String.format("{\"error\":{\"java.class\":\"%s\", \"message\":\"%s\"}}", e.getClass(), e.getMessage()));
}

有谁知道为什么不调用 ExceptionHandler ?

最佳答案

此问题已在 Spring 3.2 中修复。您可以使用 @ControllerAdvice 创建一个全局异常处理程序类。注解。然后在该类中添加一个 @ExceptionHandler处理 ServletRequestBindingException 并返回自定义响应正文的方法。例子:

@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(ServletRequestBindingException.class)
public ResponseEntity<String> handleServletRequestBindingException(ServletRequestBindingException ex) {
return new ResponseEntity<String>("MISSING REQUIRED HEADER",HttpStatus.PRECONDITION_REQUIRED);
}
}

有关更多信息,请查看 spring mvc 文档: 17.11 Handling exceptions

关于Spring3 @ExceptionHandler 用于 ServletRequestBindingException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5153132/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com