- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前正在开发一些 RESTful API 的版本 2,为了保持与版本 1 的兼容性,我想将该版本作为媒体类型参数添加到所有请求/响应中。
版本1:接受:application/json、application/json;application&version=1.0
版本2:接受:application/json;application&version=2.0
在版本 1 中,自 1970 年以来所有时间戳均序列化为以毫秒为单位的时间,但版本 2 将使用 ISO-8601。
我的想法是为媒体类型 application/json;application&version=2.0 扩展 JacksonJsonProvider:
@Provider
@Produces("application/json;application&version=2.0")
public class MyProvider extends JacksonJsonProvider {
public MyProvider() {
ObjectMapper mapper = new ObjectMapper();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy");
mapper.setDateFormat(sdf);
setMapper(mapper);
}
@Override
public boolean isWriteable(Class<?> type, Type genericType,
Annotation[] annotations, MediaType mediaType) {
// TODO Auto-generated method stub
System.err.println("\n\n*** MyProvider#isWriteable: mediaType:" + mediaType.toString() + "\n with parameters: " + mediaType.getParameters());
return true;
}
}
和测试资源:
@Path("/test")
public class TestResource {
@GET
@Produces("application/json;application&version=2.0")
public Response test( @Context HttpServletRequest request ) {
Vehicle v = new Vehicle();
return Response.ok(v).build();
}
}
问题是,使用默认的 JacksonJsonProvider 时没有考虑媒体类型的参数。如果我将所有媒体类型更改为例如@Produces("application/something")
,调用 MyProvider,并根据指定的 DateFormat 对 Vehicle 对象中的日期进行序列化。
我的问题是:如何更改默认 JacksonJsonProvider 的贪婪行为,以便考虑媒体类型的参数?
谢谢
最佳答案
更改/升级 ReSTful API 的常见方法是为新实现创建新端点。
即如果你有
@Path("/rest/api/issue")
并且您想添加同一端点的不同实现,您将向路径添加新片段
@Path("/rest/api/{version}/issue")
其中 {version} 是您选择的 api 的版本。
Atlassian 的 JIRA API 是这样做的:https://developer.atlassian.com/static/rest/jira/5.0.html
此外,使用媒体类型的内置常量也是一种很好的形式:
@GET
@Path("/rest/api/2/issue")
@Produces(MediaType.APPLICATION_JSON)
关于java - 为什么 JacksonJsonProvider 会忽略 MediaType 的参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18805321/
我目前正在开发一些 RESTful API 的版本 2,为了保持与版本 1 的兼容性,我想将该版本作为媒体类型参数添加到所有请求/响应中。 版本1:接受:application/json、applic
我正在尝试转换 URL,例如 https://api.test.com/cusomter?customer_id=1&customer_type=A 但是在序列化过程中它被转换成 https://ap
我有一个用 @Produces( MediaType.APPLICATION_JSON ) 注释的 @GET 方法。当我在 Jersey 中禁用 JSON 处理时,我希望看到该调用失败,但无论我做什么
我正在使用 Jersey + Jackson 为我的应用程序提供 REST JSON 服务层。我遇到的问题是默认的日期序列化格式如下所示: "CreationDate":1292236718456 起
我设置了 Resteasy-3.0.6、Jackson-2.2.3 和 CDI(在 Wildfly-8.0.0.CR1 上运行)。就我而言,每个实体都有一个混合类来扩展它并指定要序列化的属性。有两个“
升级到 spring 6 时,我面临无法访问 javax.ws.rs.ext.MessageBodyReader 的问题。我在 Spring 6 应用程序和 com.fasterxml.jackson
当我在添加 RESTful Web 服务后从 NetBeans 8.0 重新启动 Glassfish 3.0 服务器时,我遇到了这个异常并且无法请求 Web 服务!! Glassfish 3.0: j
我正在尝试像这样编码包含 ISO 格式时间戳的响应: { ... "time" : "2014-07-02T04:00:00.000000Z" ... } 进入我的域模型对象中的 ZonedD
我有一个带有版本化 API 的网络应用程序。在下一版本的 API 中,我想使用 ISO 格式 (2013-12-14T00:00:00.000Z) 而不是 EPOCH 格式来序列化我的 joda Da
我是一名优秀的程序员,十分优秀!