рендеринг JSON String как JSON с использованием JAXB в джерси - PullRequest
1 голос
/ 14 марта 2012

Учитывая класс как это:

@XmlRootElement
public class MyClass {
    private Boolean flag1;
    private String json;
    ...
}

Можно ли добавить аннотацию, которая заставит JSON стать частью визуализированного JSON без экранирования в виде строки?

Например, если объект имеет flag1=true и json="{"a":5}", я хочу получить:

{"flag":true,"json":{"a":5}}

вместо:

{"flag":true,"json":"{\"a\":5}"}

Ответы [ 2 ]

0 голосов
/ 14 марта 2012

Вы можете использовать провайдера для изменения поведения JSONJAXBContext по умолчанию. Смотри http://jersey.java.net/nonav/documentation/latest/user-guide.html#d4e865

import javax.ws.rs.ext.ContextResolver;
import javax.ws.rs.ext.Provider;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException; 

import com.sun.jersey.api.json.JSONConfiguration;
import com.sun.jersey.api.json.JSONJAXBContext;

@Provider
public class CustomWoodwingOutputJSONContextProvider implements ContextResolver<JAXBContext> {

private JAXBContext context;
private Class<?>[] types = { MyClass.class };

public CustomWoodwingOutputJSONContextProvider() throws JAXBException {
    this.context = new JSONJAXBContext(JSONConfiguration.natural().build(), types);
}

public JAXBContext getContext(Class<?> objectType) {
    for (int i = 0; i < this.types.length; i++)
        if (this.types[i].equals(objectType))
            return context;

    return null;
}

}

0 голосов
/ 14 марта 2012

Вы можете написать свой собственный маршаллер, чтобы сделать это.

...