ins*_*how 9 java json resteasy jackson
我使用RESTEasy使用JSON序列化实现REST服务.目前,日期自1970年以来被序列化为毫秒.为了提高兼容性,我想将我的日期变为两种格式之一; 毫秒+时区偏移或ISO 8061.
似乎RESTEasy曾经使用Jettison进行JSON序列化,但是从我一直在阅读的内容中他们已经切换到杰克逊......所有这些都让google搜索得到了很好的帮助.
据我所知,我需要实现一个ContextResolver:
public class JacksonConfig impelments ContextResolver<ObjectMapper>
{
private final OBjectMapper objectMapper;
public JacksonConfig() throws Exception
{
objectMapper = new ObjectMapper.configure(
SerializationFeature.WRITE_DATE_AS_TIMESTAMPS, false);
}
@Override
public ObjectMapper getContext(Class<?> arg0)
{
return objectMapper;
}
}
Run Code Online (Sandbox Code Playgroud)
我无法找到的是,我该怎么做?我把它放在哪里?
所以更大的问题是,我是朝着正确的方向前进,我的假设是否正确?
gre*_*ker 17
您需要ContextResolver使用Resteasy 注册您的实施.您可以通过使用注释对类进行@Provider批注并允许Resteasy在启动期间自动扫描它,在web.xml中注册它,或者在扩展的类中注册它javax.ws.rs.core.Application(如果这就是引导Resteasy的方式)来实现.
@Provider
public class JacksonConfig implements ContextResolver<ObjectMapper>
{
private final ObjectMapper objectMapper;
public JacksonConfig() throws Exception
{
objectMapper = new ObjectMapper.configure(
SerializationFeature.WRITE_DATE_AS_TIMESTAMPS, false);
}
@Override
public ObjectMapper getContext(Class<?> arg0)
{
return objectMapper;
}
}
Run Code Online (Sandbox Code Playgroud)
验证是否在web.xml文件中启用了类路径扫描,如下所示:
<context-param>
<param-name>resteasy.scan</param-name>
<param-value>true</param-value>
</context-param>
Run Code Online (Sandbox Code Playgroud)
注意:如果要在JBoss 7中部署它,请不要设置resteasy.scancontext参数,因为默认情况下它已启用.
将以下上下文参数添加到您的web.xml文件中.参数的值应该是您的完全限定类名ContextResolver.
<context-param>
<param-name>resteasy.providers</param-name>
<param-value>foo.contextresolver.JacksonConfig</paramvalue>
</context-param>
Run Code Online (Sandbox Code Playgroud)
如果您使用Application类来配置Resteasy,您可以将您的提供程序添加到服务和提供程序集中以向Resteasy注册,如下所示:
public class MyApp extends Application
{
@Override
public Set<Class<?>> getClasses()
{
HashSet<Class<?>> set = new HashSet<Class<?>>(2);
set.add(JacksonConfig.class);
set.add(MyService.class);
return set;
}
}
Run Code Online (Sandbox Code Playgroud)
使用JSR310(新api日期) - LocalDate,LocalDateTime,LocalTime
添加依赖:
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
<version>2.4.0</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
并创建一个注册模块的提供程序:
@Provider
public class JacksonConfig implements ContextResolver<ObjectMapper> {
private final ObjectMapper objectMapper;
public JacksonConfig() throws Exception {
objectMapper = new ObjectMapper()
.disable( SerializationFeature.WRITE_DATES_AS_TIMESTAMPS )
.disable( SerializationFeature.WRITE_DATE_TIMESTAMPS_AS_NANOSECONDS )
.setSerializationInclusion( JsonInclude.Include.NON_NULL )
.registerModule( new JSR310Module() );
}
@Override
public ObjectMapper getContext( Class<?> arg0 ) {
return objectMapper;
} }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9667 次 |
| 最近记录: |