如何在Jersey中从我的JSON请求中排除空字段?

我要做的是避免我的请求中的空字段。 我使用Jersey依赖项

 org.glassfish.jersey.core jersey-client 2.5   com.sun.jersey jersey-json 1.18   com.sun.jersey.contribs jersey-multipart 1.17   org.glassfish.jersey.media jersey-media-json-jackson 2.5.1  

这是我的泽西配置

 Client client = ClientBuilder .newClient() .register(authenticationFeature) .register(CustomTypeProvider.class) .register(MultiPartWriter.class) .register(JacksonFeature.class); 

这就是我要发送的内容

 { "locale": "en_US", "file": { "file": { "version": null, "permissionMask": null, "creationDate": null, "updateDate": null, "label": "my.properties", "description": null, "uri": null, "type": "prop", "content": null } } } 

但是我需要

  { "locale": "en_US", "file": { "file": { "label": "my.properties", "type": "prop", } } } 

如何从我的请求中排除所有空字段?

我相信,那件jersey正在使用jackson进行序列化。 要从序列化的json中排除空字段,请尝试使用@JsonInclude(Include.NON_NULL)注释目标类。 正如本文所述。

如果无法更改实体,则必须配置自定义ObjectMapper:

 @Provider public class MyObjectMapperProvider implements ContextResolver { final ObjectMapper mapper; public MyObjectMapperProvider() { mapper = new ObjectMapper(); mapper.setSerializationInclusion(Include.NON_NULL); } @Override public ObjectMapper getContext(Class type) { return mapper } } 

然后将自定义提供程序注册到客户端:

 Client client = ClientBuilder .newClient() .register(MyObjectMapperProvider.class) .register(JacksonFeature.class); 

它在这里描述