2013-11-07 2 views
0

Я использую последнюю версию Jackson (2.2.3) с приложением CXF.Неисправность получения желаемого выхода json с помощью JacksonJaxbJsonProvider

Вот мой провайдер Джексон:

public class CustomJacksonJsonProvider extends JacksonJaxbJsonProvider { 
    public CustomJacksonJsonProvider() { 
     ObjectMapper mapper = new ObjectMapper(); 
     mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES); 
     JaxbAnnotationModule jaxbModule = new JaxbAnnotationModule(); 
     mapper.registerModule(jaxbModule); 
     this._mapperConfig.setMapper(mapper); 
    } 
} 

У меня есть следующий аннотированный класс.

@XmlType(name = "configInfo") 
@XmlRootElement(name = "configInfo") 
public class ConfigInfo { 
    @XmlElement(name = "foo") 
    private String foo; 
    @XmlElementWrapper(name = "devices") 
    @XmlElement(name = "device") 
    private List<Device> devices; 

    public final List<Device> getDevices() { 
     if (devices == null) 
      devices = new ArrayList<Device>(); 
     return devices; 
    } 
} 

Я создал экземпляр без значения «foo» и одно устройство в списке устройств. Когда я делаю это, я получаю следующее:

{"device":[{"name":"abc","type":"def"}]} 

Как я могу сделать «устройство» как «устройства»?

ответ

0

Мне удалось понять это. Реализация ключа заключается в том, что если аннотации JAXB запутывают Джексона, то, возможно, я просто должен был бы Джексон игнорировать их. Я просто удалил регистрацию «JaxbAnnotationModule», и теперь и мои JSON, и XML-данные являются разумными. Теперь мне нужно подумать над тем, имеет ли смысл использовать «JacksonJaxbJsonProvider», а не простой провайдер.

Смежные вопросы