我正在尝试使用 JAX-RS (Jersey) 创建一个简单的 REST 服务,而不使用 Spring。我在我的实体中使用 Joda 作为日期字段。
为了配置自动 json 映射,我创建了一个 JsonMapperProvider,并在其中添加了 JodaModule:
@Provider
@Produces(MediaType.APPLICATION_JSON)
public class JsonMapperProvider implements ContextResolver<ObjectMapper> {
final ObjectMapper objectMapper;
public JsonMapperProvider() {
objectMapper = new ObjectMapper();
objectMapper.registerModule(new JodaModule());
}
@Override
public ObjectMapper getContext(Class<?> arg0) {
return objectMapper;
}
}
这是我的资源类:
@Path("users")
public class UserController {
@Inject
private UserService userService;
@GET
@Path("/{id}")
@Produces(MediaType.APPLICATION_JSON)
public User getUserById(@PathParam("id") Long id) {
return userService.findById(id);
}
}
我在此类中使用“no web.xml”配置:
@ApplicationPath("api")
public class RestApplication extends ResourceConfig {
}
但它不起作用...用户实体中的 LocalDate 字段始终返回空。
我发现的唯一解决方法是在 ResourceConfig 类中注册所有组件(包括 jersey-media-json-jackson 中的 JacksonFeature 类),如下所示:
@ApplicationPath("api")
public class RestApplication extends ResourceConfig {
public RestApplication() {
super(
UserController.class,
JsonMapperProvider.class,
JacksonFeature.class
);
}
}
这个问题还有其他解决办法吗?我不想手动注册此类中的所有服务和其他内容...
最佳答案
不,这就是它应该如何工作的。您还可以重写 javax.ws.rs.core.Application
中的方法,而不是扩展 ResourceConfig
关于java - JAX-RS、 jackson 和 JodaTime : not working automatic configuration,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26547950/