REST API'mı geliştirmek için jersey ve jackson birlikte kullanıyorum ve bir tarih dizgesini serileştirirken sorun yaşıyorum. Ben Jersey'de bir sağlayıcı sınıfı kayıt vardır:Jersey + Jackson tarih nesnesi bozukluğu
@Provider
public class MyJsonProvider extends JacksonJsonProvider {
public static final String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";
@Override
public void writeTo(Object value, Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType, MultivaluedMap<String,Object> httpHeaders, OutputStream entityStream) throws IOException, WebApplicationException {
ObjectMapper mapper = locateMapper(type, mediaType);
// Enable human readable date format
SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT);
mapper.getDeserializationConfig().setDateFormat(sdf);
mapper.getSerializationConfig().setDateFormat(sdf);
// Enable JAXB annotation, with Jackson annotation being the preferred one.
AnnotationIntrospector primary = new JacksonAnnotationIntrospector();
AnnotationIntrospector secondary = new JaxbAnnotationIntrospector();
AnnotationIntrospector introspector = new AnnotationIntrospector.Pair(primary, secondary);
mapper.getDeserializationConfig().setAnnotationIntrospector(introspector);
mapper.getSerializationConfig().setAnnotationIntrospector(introspector);
super.writeTo(value, type, genericType, annotations, mediaType, httpHeaders, entityStream);
}
}
Ve Jersey başlatma sırasında onu aldım gibi görünüyor:
Jan 24, 2011 2:53:23 PM com.sun.jersey.api.core.ScanningResourceConfig logClasses
INFO: Provider classes found:
class com.mypackage.MyJsonProvider
Ve serileştirme için çalışıyor, ama bir dize serisini çalıştığımızda
SEVERE: Servlet.service() for servlet JerseyWebApplication threw exception
org.codehaus.jackson.map.JsonMappingException: Can not construct instance of java.util.Date from String value '2010-01-25 00:00:00': not a valid representation (error: Can not parse date "2010-01-25 00:00:00": not compatible with any of standard forms ("yyyy-MM-dd'T'HH:mm:ss.SSSZ", "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", "EEE, dd MMM yyyy HH:mm:ss zzz", "yyyy-MM-dd"))
at [Source: [email protected]; line: 3, column: 37]
at org.codehaus.jackson.map.JsonMappingException.from(JsonMappingException.java:159)
at org.codehaus.jackson.map.deser.StdDeserializationContext.weirdStringException(StdDeserializationContext.java:222)
at org.codehaus.jackson.map.deser.StdDeserializer._parseDate(StdDeserializer.java:283)
at org.codehaus.jackson.map.deser.DateDeserializer.deserialize(DateDeserializer.java:26)
at org.codehaus.jackson.map.deser.DateDeserializer.deserialize(DateDeserializer.java:17)
at org.codehaus.jackson.map.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:135)
at org.codehaus.jackson.map.deser.SettableBeanProperty$MethodProperty.deserializeAndSet(SettableBeanProperty.java:221)
at org.codehaus.jackson.map.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:391)
at org.codehaus.jackson.map.deser.BeanDeserializer.deserialize(BeanDeserializer.java:286)
at org.codehaus.jackson.map.ObjectMapper._readValue(ObjectMapper.java:1568)
at org.codehaus.jackson.map.ObjectMapper.readValue(ObjectMapper.java:788)
at org.codehaus.jackson.jaxrs.JacksonJsonProvider.readFrom(JacksonJsonProvider.java:398)
at com.sun.jersey.spi.container.ContainerRequest.getEntity(ContainerRequest.java:454)
hala nasılsa deserialization işlemek için JacksonJsonProvider
kullanıyor Jersey gibi görünüyor: 2010-01-25 00:00:00
gibi, ben bir eşleme hata alıyorum. Ne yapıyorum emin değilim. Jersey'deki jumper'ı nasıl yapılandırmalıyım? Teşekkürler!
kendim geçersiz kılmak gerekmez Sonra bir kurucu
oluşturarak kendi mapper nesne oluşturmak olduğunu. Çıkarıldı deserialization yapılandırmasını writeTo() yönteminde değil readFrom() yönteminde ayarlamam gerekiyor. Duh. – fei
Neden bu "çok yerelleştirilmiş" olarak kapalı? Jersey ile Jersey yaygın bir senaryo. – Paul
@fei cevap olarak ekleyebilirsiniz – eis