¿No se necesita NotNull en Kotlin?

Tengo una class:

class User( var name: String ) 

Y una request de publicación mapeada:

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

¿Qué pasa si un cliente envía un JSON de un usuario con name: null ? ¿Será rechazado por MVC Validator o se lanzará una exception? ¿Debo anotar el name con @NotNull ? Lamentablemente, no puedo verificarlo porque solo puedo escribir testings (no está disponible para crear un User(null) ).

Como name es un parámetro no nulo de User , no puede aceptar null s, ever.

Para garantizar ese comstackdor de Kotlin:

  • inserta un cheque null dentro del constructor del User que arroja una exception si algún código Java intenta pasar un null .

  • anota el name con @NotNull para mantenerse coherente con las API de Java

  • no agrega ninguna anotación @NotNull ya que no hay una en la que todos @NotNull acuerdo 🙁

Aquí están los documentos correspondientes

Actualizar

Lo he vuelto a comprobar, y el comstackdor de Kotlin v1.0.6 inserta @Nullable y @NotNull de org.jetbrains.annotations . He actualizado la respuesta en consecuencia.

Puede evitar el uso de @NotNull , ya que nunca se activará para una propiedad que no @NotNull (la validation de bean solo comienza después de que Jackson deserializa el JSON, que es donde esto fallará).

Suponiendo que esté utilizando jackson-module-kotlin , entonces debería get una exception con MissingKotlinParameterException como causa raíz, que luego puede manejar en @ControllerAdvice . En su consejo puede manejar excepciones de validation de @Size normales (por ejemplo, ConstraintViolationException causada por @Size ) y parameters de constructor que no son nulos ( MissingKotlinParameterException ) y devolver una respuesta de API que indique los campos erróneos.

La única advertencia con esto es que el jackson-kotlin-module falla en la primera propiedad que falta , a diferencia de la validation de bean en Java, que devolverá todas las violaciones.

Como probé, @NotNull no afecta en absoluto la validation de MVC. Solo recibirá un post de WARN en la console que es normal:

Error al leer el post HTTP: org.springframework.http.converter.HttpMessageNotReadableException: No se pudo leer el documento: instanciación de …

  • Clase de datos de Kotlin a JSON con Spring / Jackson
  • kotlin y @Valid Spring anotación
  • Crear un propio DataSource con properties de resorte
  • Tenga la security de que multiparte es nulo en el controller de descanso
  • Hacer reference al valor y a los methods de llamada en types de class generics
  • Probar los methods @Async de devolución de vacío de Testing
  • No se puede conectar a Remote Mongo DB mediante Springboot
  • Spring Boot .mustache Extensión de file
  • Exception Handler no funciona con `spring-boot-starter-data-rest`
  • Anular la anotación @JsonIgnore para algunos controlleres. Jackson. Primavera
  • Seguridad de spring. Página de inicio de session multilenguaje basada en url