Не требуется ли в Котлине?

У меня есть класс:

class User( var name: String ) 

И сопоставленный запрос на публикацию:

 @PostMapping("/user") fun test(@Valid @RequestBody user: User) { //... } 

Что делать, если клиент отправит JSON пользователя с name: null ? Будет ли он отклонен MVC Validator или будет выбрано исключение? Должен ли я аннотировать name с помощью @NotNull ? К сожалению, я не могу это проверить, потому что могу писать тесты (он не доступен для создания User(null) ).

    Поскольку name является не-нулевым параметром User , он не может принимать null s, когда-либо.

    Чтобы гарантировать, что компилятор Kotlin:

    • вставляет null проверку внутри конструктора User которая генерирует исключение, если какой-либо Java-код пытается передать null .

    • аннотирует name с @NotNull , чтобы оставаться совместимым с Java API

    • не добавляет никакой аннотации @NotNull так как нет никого, с кем все согласны 🙁

    Вот соответствующие документы

    Обновить

    Я перепроверил его, и Kotlin компилятор v1.0.6 вставляет @Nullable и @NotNull из org.jetbrains.annotations . Я соответствующим образом обновил ответ.

    Вы можете избежать использования @NotNull , так как оно никогда не будет вызвано для @NotNull , @NotNull только начинается после того, как Джексон десериализует JSON, – где это произойдет).

    Предполагая, что вы используете jackson-module-kotlin , тогда вы должны получить исключение из MissingKotlinParameterException в качестве основной причины, которую вы можете обработать в @ControllerAdvice . В ваших советах вы можете обрабатывать обычные проверки валидации компонентов (например, ConstraintViolationException вызванные @Size ), и пропускать ненулевые параметры конструктора ( MissingKotlinParameterException ) и возвращать ответ API, указывающий на ошибочные поля.

    Единственное предостережение в этом состоит в том, что jackson-kotlin-module не работает с первым отсутствующим свойством , в отличие от проверки jackson-kotlin-module на Java, который вернет все нарушения.

    Когда я тестировал, @NotNull вообще не влияет на проверку MVC. Вы получите только сообщение WARN в консоли, которое является нормальным:

    Не удалось прочитать HTTP-сообщение: org.springframework.http.converter.HttpMessageNotReadableException: Не удалось прочитать документ: Создание …

    Intereting Posts