JAX-RS,Jackson和JodaTime:不工作自动配置

时间:2014-10-24 12:32:20

标签: java json jackson jax-rs jodatime

我正在尝试使用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
        );
    }
}

这个问题有另一个解决方案吗?我宁愿不要手动在本课程中注册我的所有服务和其他内容...

1 个答案:

答案 0 :(得分:1)

不,这是它应该如何运作的。您也可以覆盖javax.ws.rs.core.Application中的方法,而不是扩展ResourceConfig