Rumah >Java >javaTutorial >Bagaimanakah saya boleh memformat LocalDate dengan Jackson dalam Java 8?
Apabila berurusan dengan java.util.Date, anotasi @JsonFormat menyediakan pemformatan yang mudah. Walau bagaimanapun, untuk medan LocalDate Java 8, menggunakan penyeri tersuai dan penyahserialisasi mungkin tidak mencukupi.
Untuk mencapai pemformatan yang diingini, pendekatan yang lebih komprehensif disyorkan. Dengan memperkenalkan Jackson JSR310Module, kefungsian tambahan tersedia.
Pertama, tambahkan kebergantungan Jackson:
<dependency> <groupId>com.fasterxml.jackson.datatype</groupId> <artifactId>jackson-datatype-jsr310</artifactId> <version>2.4.0</version> </dependency>
Nota: Pastikan bahawa versi pergantungan yang disertakan diselaraskan untuk mengelakkan potensi resolusi kelas konflik.
Seterusnya, tentukan ContextResolver untuk 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; } }
Dalam kelas sumber, gunakan 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; } }
Permintaan:
curl -v http://localhost:8080/api/person
Hasil:
{"birthDate":"2015-03-01"}
Siaran Permintaan:
curl -v -POST -H "Content-Type:application/json" -d "{\"birthDate\":\"2015-03-01\"}" http://localhost:8080/api/person
Keputusan Siaran:
2015-03-01
Dengan menggunakan JSR310Module, ObjectMapperContextResolver, dan menetapkan SerializationSTAMPS_DATEFeatures kepada palsu, Java 8 LocalDate boleh diformatkan dengan berkesan dengan Jackson.
Atas ialah kandungan terperinci Bagaimanakah saya boleh memformat LocalDate dengan Jackson dalam Java 8?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!