Как перехватить @RequestParams, когда пользователь передает пустое значение - PullRequest
0 голосов
/ 21 января 2019

Я пытаюсь создать Spring MVC RestController с kotlin, но мне трудно работать с RequestParams с LocalDatetime

@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, я думаю.

Я пробовал с другими типами, такими как Дата, и это также выдает ошибку.Если я использую String, это работает, потому что String может быть пустым.Также, если я укажу LocalDateTime?как nullable это работает, но тогда я должен отлавливать ошибку в Controller в каждом RequestMapping, а не в ControllerAdvice.

1 Ответ

0 голосов
/ 22 января 2019

Я понял это сам. Просто нужно было иметь Converter<S, T> компонент для обработки даты

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

И теперь я могу обработать исключение, используя:

@ExceptionHandler(MethodArgumentTypeMismatchException::class)
fun handleMethodArgumentTypeMismatch(ex: MethodArgumentTypeMismatchException, request: WebRequest) =
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...