用户传递空值时如何捕获@RequestParams

时间:2019-01-21 19:07:51

标签: spring spring-boot spring-mvc kotlin

我试图用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中捕获Controller中的错误。

2 个答案:

答案 0 :(得分:0)

我自己弄清楚了。 只需拥有一个 window.onload(function() { response.sendRedirect(url); // or simpleAjaxReq("formatter_main.php",'file_close' , 'false'); } 组件即可处理日期转换

Converter<S, T>

现在我可以使用以下方式处理异常了:

@Component
class LocalDateConverter : Converter<String, LocalDateTime> {
    override fun convert(source: String): LocalDateTime = LocalDateTime.parse(source, DateTimeFormatter.ISO_DATE_TIME)
}

答案 1 :(得分:0)

要摆脱异常,只需将模型的属性设置为空,即endDate: LocalDateTime?

@GetMapping
fun getParams(@RequestParam(required = true) endDate: LocalDateTime?)

要验证空值,可以在data class@field:NotEmpty中使用Hibernate Validator

GL

Source