Почему имена возвращаются с @ в JSON с использованием Jersey - PullRequest
8 голосов
/ 14 июля 2010

Я использую JAXB, который является частью JAX-RS на Джерси. Когда я запрашиваю JSON для моего типа вывода, все мои имена атрибутов начинаются со звездочки, подобной этой,

Этот объект;

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 ="";
}

становится этим,

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

Итак, почему @ в названии?

Ответы [ 3 ]

9 голосов
/ 16 июля 2010

Любые свойства, сопоставленные с @XmlAttribute, будут иметь префикс @ в JSON.Если вы хотите удалить его, просто аннотируйте вашу собственность с помощью @XmlElement.

Предположительно, это позволяет избежать потенциальных конфликтов имен:

@XmlAttribute(name="foo") public String prop1;  // maps to @foo in JSON
@XmlElement(name="foo") public String prop2;  // maps to foo in JSON
1 голос
/ 12 марта 2013

Если вы выполняете маршалинг как для XML, так и для JSON, и вам не нужен его в качестве атрибута в версии XML, тогда предложение использовать @XmlElement - лучший способ.должен быть атрибутом (а не элементом) в версии XML, у вас есть довольно простая альтернатива.

Вы можете легко установить JSONConfiguration, который отключает вставку "@".

Это будет выглядеть примерно так:

@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;
}
}

Здесь также есть несколько других альтернативных документов:

http://jersey.java.net/nonav/documentation/latest/json.html

0 голосов
/ 22 декабря 2016

Вам необходимо установить JSON_ATTRIBUTE_PREFIX в вашей конфигурации JAXBContext на "", что по умолчанию равно "@":

properties.put(JAXBContextProperties.JSON_ATTRIBUTE_PREFIX, ""); 
...