Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Jersey 2.14上没有JSON提供程序(Jackson)的自动发现和手动注册_Java_Json_Jersey_Jackson_Jax Rs - Fatal编程技术网

Java Jersey 2.14上没有JSON提供程序(Jackson)的自动发现和手动注册

Java Jersey 2.14上没有JSON提供程序(Jackson)的自动发现和手动注册,java,json,jersey,jackson,jax-rs,Java,Json,Jersey,Jackson,Jax Rs,有人知道如何禁用自动发现和手动注册JacksonFeature,只是为了完全确保在使用的类路径中有多个提供程序 默认情况下,所有操作都正常工作,并对以下帮助程序的行进行了注释。 然后我尝试手动注册JSON提供程序,所以我取消注释行并指定 private void disableAutoDiscoveryAndUseJacksonProvider(ResourceConfig config) { config.property(CommonProperties.FEATURE_AU

有人知道如何禁用自动发现和手动注册JacksonFeature,只是为了完全确保在使用的类路径中有多个提供程序

默认情况下,所有操作都正常工作,并对以下帮助程序的行进行了注释。 然后我尝试手动注册JSON提供程序,所以我取消注释行并指定

private void disableAutoDiscoveryAndUseJacksonProvider(ResourceConfig config) {
        config.property(CommonProperties.FEATURE_AUTO_DISCOVERY_DISABLE, true);
        // config.property(CommonProperties.METAINF_SERVICES_LOOKUP_DISABLE, true);
        // config.property(CommonProperties.JSON_PROCESSING_FEATURE_DISABLE, false);
        config.register(JacksonFeature.class);
}

context.addServlet(new ServletHolder(new ServletContainer(config)), "/*");
使用具有以下功能的客户端时,同样的逻辑也适用:

     javax.ws.rs.client.Client client =
     javax.ws.rs.client.ClientBuilder.newBuilder().register(JacksonFeature.class).build();
编辑:由于我无法计算出它,所以我尝试以显式方式复制默认行为

ServletHolder holder = new ServletHolder(new ServletContainer()) // No Config
以这种方式调用,并将Jackson放在应用程序工作的路径中(对象正确反序列化) 但如果我将ResourceConfig显式设置为:

 ResourceConfig config = new ResourceConfig();
 //config.property(X,default)
 ServletHolder holder = new ServletHolder(new ServletContainer(config));
我得到一个反序列化错误


我试图通过指定CommonProperty的所有组合来显式模拟默认行为。*像config.property(X,默认值)、config.property(Y,默认值),但仍然没有运气,知道后面发生了什么吗?

您的代码似乎回答了您自己的问题。这有什么不好的地方吗?如果我不接触ResourceConfig,Jackson的连载效果很好。如果我在上面添加这些行,所有内容都会中断,并且我的对象在端点中解组时会引发异常。如果使用全局
CommonProperties.FEATURE\u AUTO\u DISCOVERY\u DISABLE
,我会想象这样的情况。你必须明确地注册所有东西,不仅仅是杰克逊。这很有道理。因此,如果我不关闭自动发现,如何在类路径中有多个提供程序的情况下指出默认情况下需要哪个提供程序?如果是您实现的提供程序,则很可能会获胜,具体取决于
@Provides/@Consumes
的指定性和其他。如果是第三方实现,除非提供加载提供程序的
功能,否则不应自动加载。如果是自动加载的,则选择的提供程序基于中的算法。大多数具有
功能的实现
都应该具有可以打开和关闭的属性。在MOXy的情况下,任何注册的提供者特性都将覆盖它。所以这取决于具体的情况。