如何在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);
它在这里描述