2012-04-20 17 views
5

Następne pytanie do mojej spokojnej usługi JSON.Marshal a java.util.Map <String, String>

import java.util.Map; 

import javax.xml.bind.annotation.XmlAccessType; 
import javax.xml.bind.annotation.XmlAccessorType; 
import javax.xml.bind.annotation.XmlRootElement; 

/** 
* @author Martin Burchard 
* 
*/ 
@XmlRootElement(name = "user") 
@XmlAccessorType(XmlAccessType.FIELD) 
public class User { 
    private String id; 
    private String nickname; 
    private String email; 
    private String password; 
    private Map<String, String> user_attributes; 

} 

Obecnie usługa dostarcza następujące JSON (wgniatany dla lepszego odczytu):

{ 
    "user" : { 
     "id" : "9bdf40ea-6d25-4bc3-94ad-4a3d38d2c3ca", 
     "email" : "[email protected]", 
     "password" : "xXpd9Pl-1pFBFuX9E0hAYGSDTyJQPYkOtXGvRCrEtMM", 
     "user_attributes" : { 
      "entry" : [{ 
        "key" : "num", 
        "value" : 123 
       }, { 
        "key" : "type", 
        "value" : "nix" 
       } 
      ] 
     } 
    } 
} 

Zabawne, że jest wewnętrznie Num 123 jest java.lang.String ...

ja nie rozumiem, co jest wyjaśnione tutaj http://cxf.apache.org/docs/jax-rs-data-bindings.html#JAX-RSDataBindings-DealingwithJSONarrayserializationissues

chciałbym mieć to JSON:

{ 
    "user" : { 
     "id" : "9bdf40ea-6d25-4bc3-94ad-4a3d38d2c3ca", 
     "email" : "[email protected]", 
     "password" : "xXpd9Pl-1pFBFuX9E0hAYGSDTyJQPYkOtXGvRCrEtMM", 
     "user_attributes" : { 
      "num" : "123", 
      "type" : "nix" 
     } 
    } 
} 

Zmieniłem dostawcę JSON na Jacksona. Teraz mój JSON wygląda mi się podoba ...

+0

czy na pewno potrzebujesz mapy? nie możesz mieć obiektu o nazwie atrybuty użytkownika i mieć listę atrybutów użytkownika? –

+0

Moje dodatkowe atrybuty zawsze zawierają nazwę i wartość, a ponieważ są przechowywane w bazie danych, zawsze są ciągami. Myślałem, że prosta mapa będzie wystarczająca. Czy zamiast tego powinienem użyć listy i obiektu atrybutów z nazwą i wartością? – Nabor

Odpowiedz

0

stosowanie odpowiedniej biblioteki JSON jak Jackson

1

Jedyną rzeczą, która przychodzi mi do głowy jest użycie JAXB XmlAdapter. Możesz zdefiniować, w jaki sposób dany obiekt (w twojej Mapie) byłby odwzorowany na ciąg JSON.

Powiązane problemy