Dan*_*lan 3 java rest jersey jersey-1.0
我正在使用Jersey 1.17.1并且在我创建的每个URL上我想让人们在最后放置".json".这是我所做的一个例子:
@GET
@Path("basepath{extension: (\\.json)?}")
public String foobar() {
...
}
Run Code Online (Sandbox Code Playgroud)
最终我会让他们在没有任何选择,".json"或".xml"之间做出选择,我在这里担心我的DRY违规行为.我将不得不将每个@Path改为:
@GET
@Path("basepath{extension: (\\.json|\\.xml)?}")
public String foobar() {
...
}
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法来让我的路径值更可重用?虽然我不能使用Jersey 2.0,但我有兴趣知道它是否可以解决这个问题.
实现此目的的一种方法是子类PackagesResourceConfig并通知Jersey哪些扩展应映射到哪些媒体类型.例如:
public class ExampleResourceConfig extends PackagesResourceConfig {
@Override
public Map<String, MediaType> getMediaTypeMappings() {
Map<String, MediaType> map = new HashMap<>();
map.put("xml", MediaType.APPLICATION_XML_TYPE);
map.put("json", MediaType.APPLICATION_JSON_TYPE);
return map;
}
}
Run Code Online (Sandbox Code Playgroud)
然后您的实际REST服务可能如下所示:
@GET
@Path("basepath")
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
public Response foobar() {
...
}
Run Code Online (Sandbox Code Playgroud)
泽西岛将根据网址扩展选择合适的媒体类型.请注意,Response返回而不是String.我不确定你是如何构建你的响应以及你的要求是什么,但Jersey可以处理将Java bean转换为XML或JSON(甚至是JSONP)而没有问题.
| 归档时间: |
|
| 查看次数: |
1297 次 |
| 最近记录: |