मैं एनोटेशन का उपयोग करके सरल काम करने में कभी सक्षम नहीं था। इसे काम करने के लिए, मैंने एक के ContextResolverलिए बनाया ObjectMapper, फिर मैंने एक और कैविएट के साथ JSR310Module( अपडेट: अब यह JavaTimeModuleइसके बजाय है ) जोड़ा , जो कि राइट करने के लिए राइट-डेट-ए-टाइमस्टैम्प सेट करने की आवश्यकता थी। JSR310 मॉड्यूल के प्रलेखन पर अधिक देखें । यहाँ एक उदाहरण है कि मैंने क्या प्रयोग किया।
निर्भरता
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
<version>2.4.0</version>
</dependency>
नोट: एक समस्या जिसका मुझे सामना करना पड़ा है वह यह है कि jackson-annotationएक और निर्भरता द्वारा खींचा गया संस्करण, 2.3.2 का उपयोग किया गया संस्करण, जिसे 2.4 आवश्यक द्वारा रद्द कर दिया गया था jsr310। क्या हुआ मुझे एक NoClassDefFound मिला ObjectIdResolver, जो कि एक 2.4 वर्ग है। इसलिए मुझे सिर्फ शामिल निर्भरता संस्करणों को लाइन करने की आवश्यकता थी
ContextResolver
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.datatype.jsr310.JSR310Module;
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();
// Now you should use JavaTimeModule instead
MAPPER.registerModule(new JSR310Module());
MAPPER.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
}
@Override
public ObjectMapper getContext(Class<?> type) {
return MAPPER;
}
}
संसाधन वर्ग
@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;
}
}
परीक्षा
curl -v http://localhost:8080/api/person
परिणाम: {"birthDate":"2015-03-01"}
curl -v -POST -H "Content-Type:application/json" -d "{\"birthDate\":\"2015-03-01\"}" http://localhost:8080/api/person
परिणाम: 2015-03-01
यहां भी देखेंJAXB समाधान के लिए ।
अपडेट करें
JSR310Moduleजैक्सन के संस्करण 2.7 के रूप में मान्य नहीं है। इसके बजाय, आपको मॉड्यूल को पंजीकृत करना चाहिए JavaTimeModule। यह अब भी वही निर्भरता है।