configuration de l'application web Spring contient Jackson ObjectMapper
configuré comme celui-ciSpring MVC: paramètres de requête Deserialise à POJO en utilisant Jackson objectMapper
objectMapper.disable(ADJUST_DATES_TO_CONTEXT_TIME_ZONE)
objectMapper.registerModule(new JavaTimeModule())
JavaTimeModule
est ajouté à gérer désérialisation de ZonedDateTime
. Il y a deux points d'extrémité qui traitent un POJO qui contient ZonedDateTime
. Le POJO est comme ceci:
class MyRequest {
ZonedDateTime from
ZonedDateTime to
}
et contrôleur avec points d'extrémité est:
@Slf4j
@RestController
class MyController {
@GetMapping('/pojo')
void getPojo(MyRequest myRequest) {
log.debug("Request received: $myRequest")
}
@PostMapping('/pojo')
void postPojo(@RequestBody MyRequest myRequest) {
log.debug("Request received: $myRequest")
}
}
Lorsque j'envoie POST/POJO avec le corps
{"from": "2017-03-15T00:00:00Z", "to": "2017-03-16T00:00:00Z"}
La réponse est 200 et désérialisation est couronnée de succès.
A l'inverse, quand j'envoie
GET /pojo?from=2017-03-15T00:00:00Z&to=2017-03-15T00:00:00Z
Le 400 Bad Request est reçu avec erreur
Failed to convert from type [java.lang.String] to type [java.time.ZonedDateTime] for value '2017-03-15T00:00:00Z'
Ce sens de faire, puisque dans la demande GET, je ne suis pas envoyer JSON et donc objet JSON Le mappeur n'est pas appelé.
Existe-t-il un moyen d'utiliser également objectMapper
pour les requêtes GET, afin que les paramètres de requête soient convertis en objet POJO?
D'ailleurs, je sais qu'il peut être désérialisé pour point final GET comme ci-dessous, mais je veux utiliser le même convertisseur pour GET et point final POST
@DateTimeFormat(iso = ISO.DATE_TIME)
ZonedDateTime from
@DateTimeFormat(iso = ISO.DATE_TIME)
ZonedDateTime to