Java 如何使用@products注释?
我想在我正在编写的程序中使用@products({Mediatype.Application\uxml,Mediatype.Application\ujson})。我只想在一个方法上使用它,但我不知道它何时返回JSON对象,何时返回XML页面。下面是我正在编写的代码,在这两种情况下,它都会返回一个XML提要。如果它不符合if-else标准,我希望它返回一个JSON对象Java 如何使用@products注释?,java,rest,jakarta-ee,annotations,jersey,Java,Rest,Jakarta Ee,Annotations,Jersey,我想在我正在编写的程序中使用@products({Mediatype.Application\uxml,Mediatype.Application\ujson})。我只想在一个方法上使用它,但我不知道它何时返回JSON对象,何时返回XML页面。下面是我正在编写的代码,在这两种情况下,它都会返回一个XML提要。如果它不符合if-else标准,我希望它返回一个JSON对象 @Path("/{search}") @GET @Produces({MediaType.APPLICATION_JSON, M
@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" );
}
@Path(“/{search}”)
@得到
@产生({MediaType.APPLICATION_JSON,MediaType.APPLICATION_XML})
公共字符串getCountryData(@PathParam(“搜索”)字符串搜索、@QueryParam(“ccode”)字符串ccode、@QueryParam(“scode”)字符串scode){
if(ccode.equals(“XML”)){
return“Tove JaniReminder本周末别忘了我!”;
}
返回EndecaConn.ConnectDB(“搜索”,搜索,“模式匹配部分”);
}
必须将实体设置为域实体的响应对象返回。xml/json的序列化是自动完成的
见:
yYou可以返回如下实体:
Foo myReturn = new Foo(blah,blah,blah)
return Response.ok(myReturn).build()
如果需要细粒度序列化,可以在域类上使用注释。媒体类型将是请求的一部分,不应将其作为查询参数。下面是一些示例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;
}
当客户端HTTP
Accept
头用于XML(text/XML
)时,它将返回XML。如果是application/json
,它将返回json。我不知道客户端将使用什么..我无法更改客户端的accept标头…因为我不是客户端..除了创建两个依赖于客户端的新方法之外,没有其他方法可以执行此操作..如果要编写xml或json,使用@products
没有多大意义你自己.这都是关于内容的谈判。Google这个术语是为了更好地了解机制betterreturn EndecaConn.ConnectDB(“搜索”,Search,“mode matchallpartial”)为我对JSON进行序列化。我使用了一个将Java对象转换为JSON对象的对象映射器。所以我的班恩德卡康负责这件事。我想这就是你的意思。你可以做任何一件事。返回响应对象还允许您在实体中设置特定的头、URI和响应代码。