我想在我正在编写的程序中使用@Produces({Mediatype.Application_XML,Mediatype.Application_JSON})。我只想在一个方法上使用它,但我很困惑,它什么时候会返回一个JSON对象,什么时候会返回一个XML页面。这是我正在编写的代码,在这两种情况下它都返回一个XML feed。我希望它返回一个JSON对象,如果它不符合if-else标准。
@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" );
}
答案 0 :(得分: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;
}
答案 1 :(得分:0)
您必须返回一个Response对象,并将实体设置为您的域实体。 xml / json的序列化是自动完成的。
请参阅:https://jsr311.java.net/nonav/releases/1.1/javax/ws/rs/core/Response.html
你可以回复这样的实体:Foo myReturn = new Foo(blah,blah,blah)
return Response.ok(myReturn).build()
如果您需要细粒度序列化,则可以在域类上使用注释。