2012-03-13 3 views
1

Учитывая класс, как это:рендеринга JSON строку как JSON с помощью JAXB в джерси

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

ответ

0

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

0

Вы можете использовать Провайдер, чтобы изменять поведение 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

Это слишком много для меня на данный момент. Я надеялся на что-то более простое. Возможно, это поможет кому-то другому. Для моих собственных нужд я просто оставил его как строку. И я разбираю json на стороне клиента. – epeleg

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