【问题标题】:IllegalArgumentException during parsing ResponseBody解析 ResponseBody 期间出现 IllegalArgumentException
【发布时间】:2020-07-06 04:06:56
【问题描述】:

我正在开发 Spring Boot 2.0.3

我正在尝试解析一个简单的 JSON 有效负载,如下所示

{
    "title": "Test Title",
    "description": "Test Desc"
}

带有验证的模型 (kotlin)

data class SimpleObject(
    @NotNull
    @JsonProperty("title")
    val title: String,
    @JsonProperty("description")
    val description: String
)

我在controller 中的方法如下所示

@PostMapping(value = "/${api.version}/path")
public ResponseEntity postLandingData(final @RequestParam("param1") String kruxSegments,
                                          final @RequestHeader(
                                              value = "Some-Id",
                                              required = false) List<String> profileIdList,
                                          final @RequestBody(required = false) @Valid SimpleObject simpleObject) {

//code related to getting response

}
  1. 当我创建具有有效请求正文的请求时,我可以看到 JSON 有效负载已正确处理
  2. 当我使用格式错误的 JSON 有效负载创建请求时,如下所示(请注意缺少必填字段)
{
    "description": "Test Desc"
}

IllegalArgumentException 被抛出

我尝试在Controller 中使用ExceptionHandler 捕获此异常,如下所示,但这不起作用

@ExceptionHandler(IllegalArgumentException.class)
public void handleException() {
    LOG.severe("------------------ILLEGAL-----------------");
}

注意:以下依赖被添加到 build.gradle

classpath "org.springframework.boot:spring-boot-starter-validation:2.3.1.RELEASE"

另请注意:是的,它是 javaa + kotlin 代码库:)

我的问题是

  1. 根据我阅读的内容,在这种情况下不应该抛出 MethodArgumentNotValidException
  2. 为什么@ExceptionHandler 不能捕获IllegalArgumentException

谢谢

【问题讨论】:

  • ExceptionHandler 不起作用,因为它被设计为处理来自控制器方法调用的异常。在您的情况下,IllegalArgumentException 是由 spring mvc 框架本身引发的,因此执行甚至还没有到达您的控制器,因此 ExceptionHandler 甚至不会出现。您可以从 IllegalArgumentException 的完整堆栈跟踪中确认这一点。
  • 您能否分享 IllegalArgumentException 的完整堆栈跟踪,这肯定有助于回答您的第一个问题“不应该抛出 MethodArgumentNotValidException
  • 检查这是否有帮助。 stackoverflow.com/questions/62054406/…

标签: spring-boot spring-boot-2


【解决方案1】:

您必须在您的 controllerAdvice 中扩展 ResponseEntityExceptionHandler 并覆盖该方法

@Override protected ResponseEntity&lt;Object&gt;handleMethodArgumentNotValid(MethodArgumentNotValidException ex, HttpHeaders headers, HttpStatus status, WebRequest request)

【讨论】:

    猜你喜欢
    • 2018-08-24
    • 1970-01-01
    • 2014-01-28
    • 1970-01-01
    • 1970-01-01
    • 2016-09-08
    • 2011-08-07
    • 2019-09-05
    • 1970-01-01
    相关资源
    最近更新 更多