2009-12-21 35 views
2

我成功使用JAX-RS和JAXB註釋將POJO編組爲JSON。Marshall /將一個JSON解析爲使用JAXB的Java類

問題是,當我試圖使用相同的un-marshalling我的請求它不起作用。據我所知,在documentation JAX-RS可以自動編組和解組應用程序/ JSON字符串回到Java類。

我是否需要爲此創建自己的MessageBodyReader,或者在沒有使用Jackson庫的情況下由框架支持?

+0

您正在使用哪種JAX-RS實現? – skaffman 2009-12-21 08:49:47

回答

0

我一直在使用Apache Wink,爲此我需要使用JSON提供程序,例如Jettison(一位同事一直在使用Jackson)。我寫了我採取的步驟here

我的猜測是你也需要使用JSON提供程序。有沒有理由不使用傑克遜提供商?

2

我一直在RESTEasy中成功地做到這一點。我將它設置爲使用XML和JSON。下面是一個請求處理程序:

@POST 
@Produces(["application/json","application/xml"]) 
@Consumes(["application/json","application/xml"]) 
@Path("/create") 
public Response postCreate(
     ReqData reqData) { 
    log.debug("data.name is "+ data.getName()); 
    ... 
    return Response.status(Response.Status.CREATED) 
    .entity(whatever) 
    .location(whateverURI) 
    .build(); 

} 

ReqData是一個JavaBean,即它具有一個默認的構造,它有setter和getter該編組發現。我在ReqData中沒有任何特殊的JSON標籤,但是我在頂部爲XML編組器提供了@XmlRootElement(name =「data」),並且在setter上有@XmlElement標籤。

我使用單獨的bean進行輸入和輸出,但據我所知可以使用相同的bean。

客戶端程序在請求的實體主體中發送JSON字符串,並將Context-Type和Accept標頭都設置爲「application/json」。

4

編組爲XML很容易,但我花了一段時間才弄清楚如何編組爲JSON。雖然你找到解決方案後很簡單。

public static String marshalToXml(Object o) throws JAXBException { 

    StringWriter writer = new StringWriter(); 
    Marshaller marshaller = JAXBContext.newInstance(o.getClass()).createMarshaller(); 
    marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); 
    marshaller.marshal(o, writer); 
    return writer.toString(); 
} 

public static String marshalToJson(Object o) throws JAXBException { 

    StringWriter writer = new StringWriter(); 
    JAXBContext context = JSONJAXBContext.newInstance(o.getClass()); 

    Marshaller m = context.createMarshaller(); 
    JSONMarshaller marshaller = JSONJAXBContext.getJSONMarshaller(m); 
    marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); 
    marshaller.marshallToJSON(o, writer); 
    return writer.toString(); 
} 
+0

這個答案是如此無用。什麼是JSONJAXBContex?你沒有提供任何信息。 – 2014-11-14 10:14:28

+0

它似乎是舊版jersey-json的com.sun.jersey.api.json.JSONJAXBContext。 – seanf 2014-12-16 05:10:25