2011-04-10 30 views
5

üretir Yaylı bir RESTful web hizmeti uyguladım. Hizmet, Accept üstbilgisine bağlı olarak XML veya JSON'da yanıt verir. istemci uygulama/json için Kabul başlığı koyarYaylı REST | MappingJacksonHttpMessageConverter, geçersiz JSON

@Controller 
@RequestMapping(value = "/entityService") 
class RestfulEntityService { 

    @Resource 
    private EntityService entityService; 

    @ResponseBody 
    @RequestMapping(value = "/getAllEntities", method = RequestMethod.GET) 
    public List<Entity> getAllEntities() { 
    return entityService.getAllEntities(); 
    } 
} 

XML yanıtı ise geçerlidir, yanıttır: Burada

<bean id="xstreamMarshaller" class="org.springframework.oxm.xstream.XStreamMarshaller"/> 
    <bean id="xmlMessageConverter" 
     class="org.springframework.http.converter.xml.MarshallingHttpMessageConverter"> 
    <constructor-arg ref="xstreamMarshaller"/> 
    <property name="supportedMediaTypes" value="application/xml"/> 
    </bean> 

    <bean id="jsonHttpMessageConverter" 
     class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"> 
    <property name="prefixJson" value="false"/> 
    <property name="supportedMediaTypes" value="application/json"/> 
    </bean> 

    <bean 
    class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> 
    <property name="messageConverters"> 
     <util:list id="beanList"> 
     <ref bean="xmlMessageConverter"/> 
     <ref bean="jsonHttpMessageConverter"/> 
     </util:list> 
    </property> 
    </bean> 

benim denetleyicisi yöntemidir: Burada context.xml haritalama var geçersiz JSON.

[{"id":3,"attributes":[{"id":18,"attributeValue":null,"attributeName":"mobile","attributeType":"varchar(40)","entity":{"id":3,"attributes":[{"id":18,"attributeValue":null,"attributeName":"mobile","attributeType":"varchar(40)","entity":{"id":3,"attributes":[{"id":18,"attributeValue":null,"attributeName":"mobile","attributeType":"varchar(40)","entity":{"id":3,"attributes": ..... repeats for a while and then stops.. 
+0

Tam geçerli ve tam bir geçersiz yanıt göndermeye değer olabilir –

+0

Geçersiz yanıt çok büyüktür (geçerli yanıt da geçerli) çünkü 100 öğenin listesini serileştirmesi gerekiyor. Gönderdiğim geçersiz yanıt sadece yüz kez tekrarlanır ve durur .. – Sri

+0

İlginç bir şekilde bir veya iki öğeyle küçük bir liste JSON'a doğru şekilde serileştirilir. – Sri

cevap

11

XML yanıtları seri hale getirmek XStream kullanıyor ve Jackson JSON JSON yanıtları seri hale getirmek için:

İşte JSON yanıtı örneğidir. Gönderdiğiniz JSON çıktısına bakarak, elinizde dairesel bir referans sorunu var gibi görünüyor. Sanırım Entity, her birinin kendi varlığına işaret eden bir özellik listesine sahip. XStream, dairesel referansları, XPath kullanarak şeffaf bir şekilde ele alır, bu, nesnelere tekrar serpiştirildiğinde referansların korunmasına izin verir. Jackson, v1.6'dan beri döngüsel referansları idare edebilir, ancak seri hale getirilmiş öğelerinizi @JsonManagedReference ve @JsonBackReference ile ekleyerek yardımcı olmalısınız. Bence Jackson, JSON serileştirme için geri göndermelere izin vermede benzersizdir.

Referans için handling bi-directional references using declarative methods numaralı telefondan Jackson'ın belgelerine bakın.

+0

Sesler umut vericidir .. deneyeyim! – Sri

+0

Bir charmm gibi çalışır ..: bow: – Sri

İlgili konular