Java 我可以让Jersey全局/默认使用自然JSON符号吗?

Java 我可以让Jersey全局/默认使用自然JSON符号吗?,java,json,jersey,jax-rs,Java,Json,Jersey,Jax Rs,我正在使用Jersey为服务构建RESTAPI。我希望能够接受和返回JSON和XML,并使其大部分工作正常,但我不喜欢Jersey喜欢吐出的JSON的默认“映射”风格 我知道较新的“自然”表示法(我将详细引用它,因为它使默认的“映射”表示法的问题变得显而易见): 在使用映射JSON符号一段时间后,很明显 需要手动配置所有各种东西可能有点困难 有问题的为了避免手工操作,我们使用了一种新的、自然的JSON符号 在Jersey版本1.0.2中引入。用自然符号,泽西 将自动计算出单个项目需要如何处理 已

我正在使用Jersey为服务构建RESTAPI。我希望能够接受和返回JSON和XML,并使其大部分工作正常,但我不喜欢Jersey喜欢吐出的JSON的默认“映射”风格

我知道较新的“自然”表示法(我将详细引用它,因为它使默认的“映射”表示法的问题变得显而易见):

在使用映射JSON符号一段时间后,很明显 需要手动配置所有各种东西可能有点困难 有问题的为了避免手工操作,我们使用了一种新的、自然的JSON符号 在Jersey版本1.0.2中引入。用自然符号,泽西 将自动计算出单个项目需要如何处理 已处理,因此您无需执行任何类型的手动操作 配置Java数组和列表映射到JSON数组,甚至 对于单元素情况。Java数字和布尔值是正确的 映射到JSON数字和布尔值,您无需费心 与JSON一样,XML属性保留原始名称

我想在任何地方都使用它,但我一直不知道如何使用它。我正在通过Tomcat的XML配置文件实例化/配置Jersey——我相信这是servlet/servlet class/init param标记的正常舞蹈——但我还没有找到关于是否可以或如何从那里指定JSONConfiguration选项的文档

我还尝试实现了我自己的ContextResolver,它应用了我从Java代码实例化的JSONJAXBContext,在这里我可以应用JSONConfiguration.natural()。这是可行的,但仅适用于我在代码中明确列出的类型,并传递给JSONJAXBContext构造函数。这不仅是要编写和维护的额外代码,如果我添加更多的数据类,这些代码也会发生变化,但它不适用于列表之类的东西


有没有办法告诉Jersey使用自然表示法而不是映射表示法,无论是始终还是所有类型?

我从未找到我在这里提出的实际问题的答案,但我找到了一个简单的三步流程,实现了我想要的相同最终结果:

  • 添加到我的项目中
  • 将Jersey配置为启用
  • 打我自己几巴掌,因为结果很容易
Jersey文档突出地提到了这个POJOMappingFeature/FEATURE_POJO_映射(这是我在问题中链接的文档页面中的第一个示例),但没有确切描述它的含义,从文档显示信息的方式来看,我认为这个选项(5.1,“POJO支持”)与选项5.2不一致(“基于JAXB的JSON支持”),这听起来更像是我想要的。因此,在尝试启用特性映射之前,我尝试了很多其他方法

但一旦我尝试过,它就完全按照我的想法工作了,而且我不必回头看


这样做的一个附带好处是,与Jersey的原生JSON处理实现相比,Jackson在客户端传递虚假JSON内容的情况下生成的错误消息要好得多。

您的意思是您设置了“com.sun.Jersey.api.JSON.POJOMappingFeature”吗“在web.xml中是否为true并将jackson库包含在您的项目中?我试过了,但没什么改变。我找到的唯一解决方案是创建一个ContextResolver,在应用程序子类中注册它(它不是由@Provider注释自动找到的),并在ContextResolver中列出我的所有类。也就是说,您在问题中已经描述了您不喜欢的解决方案。你能否提供更多关于你是如何解决这个问题的细节?