2010-07-14 10 views
8

kullanarak JSON @ ile döndürülen isimler Jersey JAX-RS'nin bir parçası olan JAXB kullanıyorum. Çıkış türüm için JSON istediğimde, tüm öznitelik adları şu şekilde bir yıldız işareti ile başlar:Neden Jersey @

Bu nesne;

package com.ups.crd.data.objects; 

import javax.xml.bind.annotation.XmlAttribute; 
import javax.xml.bind.annotation.XmlType; 

@XmlType 
public class ResponseDetails { 
    @XmlAttribute public String ReturnCode = ""; 
    @XmlAttribute public String StatusMessage = ""; 
    @XmlAttribute public String TransactionDate =""; 
} 

bu olur

{"ResponseDetails":{"@transactionDate":"07-12-2010", 
      "@statusMessage":"Successful","@returnCode":"0"} 

Peki, neden adına orada @ nelerdir?

cevap

9

@XmlAttribute ile eşlenen tüm özellikler JSON içinde '@' ile öneklenecektir. Kaldırmak isterseniz, mülkünüzü @XmlElement ile notlandırdınız. XML ve JSON hem sıralanırken ise

@XmlAttribute(name="foo") public String prop1; // maps to @foo in JSON 
@XmlElement(name="foo") public String prop2; // maps to foo in JSON 
+0

! @ XmlAttribute ile @ alanları önce ve '@ XmlElement 'ile herhangi bir çıktı almıyorum! – sajjadG

1

ve daha sonra öneri kullanmak XML sürümünde bir özellik olarak buna ihtiyacı yoktur @XmlElement:

Tahminen bu potansiyel isim çakışmalarını önlemek için gitmenin en iyi yolu. XML versiyonu (daha doğrusu bir elementin yerine) bir nitelik olması gerekiyorsa

Ancak, yapmanız oldukça kolay alternatif var.

"@" girişini kapatan bir JSONConfiguration kolayca ayarlayabilirsiniz.

Böyle görünecektir:

@Provider 
public class JAXBContextResolver implements ContextResolver<JAXBContext> { 
private JAXBContext context; 

public JAXBContextResolver() throws Exception { 
    this.context= new JSONJAXBContext(
     JSONConfiguration 
      .mapped() 
      .attributeAsElement("StatusMessage",...) 
      .build(), 
      ResponseDetails.class); 
} 

@Override 
public JAXBContext getContext(Class<?> objectType) { 
    return context; 
} 
} 

burada da bazı diğer alternatifler belge vardır:

http://jersey.java.net/nonav/documentation/latest/json.html Sen "" için JAXBContext konfigürasyonda JSON_ATTRIBUTE_PREFIX belirlemek zorunda

+0

Bağlantı bozuk. ve en son jersey belgelerini kontrol ettim ve içinde JSONConfiguration ile ilgili hiçbir şey yok! – sajjadG

0

varsayılan olarak hangi :

properties.put(JAXBContextProperties.JSON_ATTRIBUTE_PREFIX, ""); 
Benim için çalışmıyor