【发布时间】:2019-06-15 05:19:16
【问题描述】:
我正在尝试用 kotlin 做一个 Spring MVC RestController, 但我在使用 LocalDatetime 的 RequestParams 时遇到了困难
@GetMapping
fun getParams(@RequestParam(required = true) endDate: LocalDateTime)
如果我没有指定参数localhost:8080/,它会给出一个可以在ControllerAdvice 中捕获的错误,但是如果我指定一个空值localhost:8080/endDate=,它会给我
java.lang.IllegalArgumentException: Parameter specified as non-null is null: method net.agroop.deviceapi.controllers.DeviceController.getAirParams, parameter endDate
我认为无法在 ControllerAdvice 中捕获该错误,因为这是一个 kotlin 错误。
我尝试过使用其他类型,如 Date ,它也给出了错误。如果我使用 String 它可以工作,因为 String 可以为空。 另外,如果我指定 LocalDateTime?因为它可以为空,但我必须在每个 RequestMapping 中捕获控制器中的错误,而不是在 ControllerAdvice 中。
【问题讨论】:
-
您是否设置了
@ControllerAdvice? -
将参数指定为可为空,或者在注解中给它一个默认值。
-
不要使用
@RequestParam,而是使用具有endDate字段的表单对象,并使用@NotNull等常规验证规则来验证表单。这也与 Spring I18N 集成,您也可以提供很好的错误消息。 -
是的@RoddyoftheFrozenPeas 我已经设置了它,如果我不传递参数或无效日期,它会缓存,但如果参数传递但为空/null,则不会缓存
-
我知道@gidds,但我正试图捕捉 ControllerAdvice 中的所有错误
标签: spring spring-boot spring-mvc kotlin