将 JSONJAXBContext jersey 1.x 迁移到 2.x

Migration of JSONJAXBContext jersey 1.x to 2.x

我想将我的球衣版本从 1.x 升级到 2.x。 在我的代码中我有:

@Provider
@Produces(MediaType.APPLICATION_JSON)
public class JAXBContextResolver implements ContextResolver<JAXBContext> {
private static final Class<?>[] classes = {
        A.class, B.class, C.class, D.class, E.class,
        F.class, G.class
};
private JAXBContext context;

public JAXBContextResolver() throws Exception {
    context = new JSONJAXBContext(JSONConfiguration.natural()
            .humanReadableFormatting(true).rootUnwrapping(true).build(),
            classes);
}

public JAXBContext getContext(Class<?> objectType) {
    return context;
}
}

但是 JSONJAXBContext 和 JSONConfiguration 没有在 jersey 中定义 2.x。 我怎样才能做出相应的改变?

问题 Where did JSONConfiguration go in Jersey 2.5.x? 没有回答我的问题,因为它没有解释如何添加我想要 return 作为输出

的 class

不需要这个。您将使用 MOXy 或 Jackson 作为您在泽西 2.x 的 JSON 供应商。对于后者,您可以配置 MoxyJsonConfig。对于 Jackson,您使用 ObjectMapper。找出您正在使用的提供程序,并配置相应的对象。两者都可以像您目前所做的那样在 ContextResolver 中进行配置。

就你目前的配置而言

  1. 您不需要使用其中任何一个配置任何 类。
  2. 默认情况下,展开的对象是序列化的。
  3. 为了漂亮的打印,您需要执行以下操作

    杰克逊

    ObjectMapper mapper = new ObjectMapper();
    mapper.configure(SerializationFeature.INDENT_OUTPUT, true);
    

    MOXy

    MoxyJsonConfig config = new MoxyJsonConfig()
            .setFormattedOutput(true);