0

我正在研究 Spring Boot2.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被抛出

我尝试使用下面ExceptionHandlerController类似方法捕获此异常,但这不起作用

@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

谢谢

4

1 回答 1

0

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

@Override protected ResponseEntity<Object>handleMethodArgumentNotValid(MethodArgumentNotValidException ex, HttpHeaders headers, HttpStatus status, WebRequest request)

于 2020-07-06T18:44:10.247 回答