Lorsque vous traitez java.util.Date, l'annotation @JsonFormat fournit un formatage pratique. Cependant, pour le champ LocalDate de Java 8, l'utilisation de sérialiseurs et de désérialiseurs personnalisés peut ne pas suffire.
Pour obtenir le formatage souhaité, une approche plus complète est recommandée. En introduisant le module Jackson JSR310, des fonctionnalités supplémentaires deviennent disponibles.
Tout d'abord, ajoutez la dépendance Jackson :
<dependency> <groupId>com.fasterxml.jackson.datatype</groupId> <artifactId>jackson-datatype-jsr310</artifactId> <version>2.4.0</version> </dependency>
Remarque : Assurez-vous que les versions de dépendances incluses sont alignées pour éviter une résolution potentielle de classe conflits.
Ensuite, définissez un ContextResolver pour ObjectMapper :
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; import javax.ws.rs.ext.ContextResolver; import javax.ws.rs.ext.Provider; @Provider public class ObjectMapperContextResolver implements ContextResolver<ObjectMapper> { private final ObjectMapper MAPPER; public ObjectMapperContextResolver() { MAPPER = new ObjectMapper(); MAPPER.registerModule(new JavaTimeModule()); MAPPER.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false); } @Override public ObjectMapper getContext(Class<?> type) { return MAPPER; } }
Dans la classe de ressources, utilisez le ObjectMapperContextResolver :
@Path("person") public class LocalDateResource { @GET @Produces(MediaType.APPLICATION_JSON) public Response getPerson() { Person person = new Person(); person.birthDate = LocalDate.now(); return Response.ok(person).build(); } @POST @Consumes(MediaType.APPLICATION_JSON) public Response createPerson(Person person) { return Response.ok( DateTimeFormatter.ISO_DATE.format(person.birthDate)).build(); } public static class Person { public LocalDate birthDate; } }
Demande :
curl -v http://localhost:8080/api/person
Résultat :
{"birthDate":"2015-03-01"}
Publier Requête :
curl -v -POST -H "Content-Type:application/json" -d "{\"birthDate\":\"2015-03-01\"}" http://localhost:8080/api/person
Résultat de publication :
2015-03-01
En employant JSR310Module, ObjectMapperContextResolver et en définissant SerializationFeature.WRITE_DATES_AS_TIMESTAMPS à false, Java 8 LocalDate peut être formaté efficacement avec Jackson.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!