我正在尝试使用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);
}
}
我正在使用“无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
);
}
}
这个问题有另一个解决方案吗?我宁愿不要手动在本课程中注册我的所有服务和其他内容...
答案 0 :(得分:1)
不,这是它应该如何运作的。您也可以覆盖javax.ws.rs.core.Application
中的方法,而不是扩展ResourceConfig