2

我想在我正在编写的程序中使用@Produces({Mediatype.Application_XML, Mediatype.Application_JSON})。我只想在一种方法上使用它,但我很困惑它什么时候返回一个 JSON 对象,什么时候返回一个 XML 页面。这是我正在编写的代码,在这两种情况下它都会返回一个 XML 提要。如果它不符合 if-else 标准,我希望它返回一个 JSON 对象。

@Path("/{search}")
@GET
@Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML}) 
public String getCountryData(@PathParam("search") String search,    @QueryParam("ccode") String ccode , @QueryParam("scode") String scode) {

    if(ccode.equals("XML")){
        return "<note> <to>Tove</to> <from>Jani</from><heading>Reminder</heading> <body>Don't forget me this weekend!</body></note>";   
    }   

    return EndecaConn.ConnectDB("Search", search,"mode matchallpartial" );
}
4

2 回答 2

1

媒体类型将是请求的一部分,您不应将其作为查询参数包含在内。下面是一些示例 Java 代码,它们会将数据请求为application/xml.

String uri =
    "http://localhost:8080/CustomerService/rest/customers/1";
URL url = new URL(uri);
HttpURLConnection connection =
    (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setRequestProperty("Accept", "application/xml");

JAXBContext jc = JAXBContext.newInstance(Customer.class);
InputStream xml = connection.getInputStream();
Customer customer =
    (Customer) jc.createUnmarshaller().unmarshal(xml);

connection.disconnect();

在您的示例中,您可以有不同的方法对应于不同媒体类型的相同路径。

@Path("/{search}")
@GET
@Produces(MediaType.APPLICATION_JSON) 
public String getCountryDataJSON(@PathParam("search") String search, @QueryParam("scode") String scode) {
    return JSON;
}

@Path("/{search}")
@GET
@Produces(MediaType.APPLICATION_XML) 
public String getCountryDataXML(@PathParam("search") String search, @QueryParam("scode") String scode) {
    return XML;
}
于 2013-07-24T19:12:33.723 回答
0

您必须返回一个带有实体集的 Response 对象到您的域实体。xml/json 的序列化是自动完成的。

请参阅:https ://jsr311.java.net/nonav/releases/1.1/javax/ws/rs/core/Response.html

y您可以像这样返回一个实体:

Foo myReturn = new Foo(blah,blah,blah)
return Response.ok(myReturn).build()

如果您需要细粒度的序列化,您可以在域类上使用注释。

于 2013-07-24T18:41:23.130 回答