Jersey POJOMappingFeature将null转换为空字符串?
我正在使用Jersey 1.18并启用了POJOMappingFeature。 我希望所有传入和传出的JSON值都从null
转换为空字符串。
如何配置映射? 我搜索过网页但无法找到我要找的内容。
从我的web.xml:
Jersey REST Service com.sun.jersey.spi.container.servlet.ServletContainer com.sun.jersey.config.property.packages com.abc.restControllers com.sun.jersey.api.json.POJOMappingFeature true 1
以及控制器的一个例子:
package com.abc.restControllers; import javax.ws.rs.Consumes; import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; import com.abc.restModals.Place.Place_descInfo_Request; import com.abc.restModals.Place.Place_descInfo_Response; @Path("/place") public class PlaceController { @POST @Path("/place_descInfo") @Consumes(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON) public Place_descInfo_Response place_descInfo(Place_descInfo_Request req) { return new Place_descInfo_Response(req); } } // End class
如果您使用的是Jackson ,您可以为您的pojos编写自定义序列化程序。 例如:
public class FooSerializer extends JsonSerializer { @Override public void serialize(final Foo value, final JsonGenerator jgen, final SerializerProvider provider) throws IOException { if (value.bar() == null) { jgen.writeString(""); } else { jgen.writeString(value.bar()); } } }
然后,在你的Foo
对象上:
@JsonSerialize(using = FooSerializer.class) public class Foo { private String bar; public String bar() { return bar; } }
您还可以通过扩展JsonDeserializer
来处理传入的空值,或者使用filter来解析主体来创建自定义反序列化器?
如果您正在使用Jackson并且可以访问ObjectMapper
,则可以按照您想要的方式对其进行配置。
您可以设置为空对象写入空字符串的空值序列化程序,并注册一个字符串反序列化器,它将JSON中的空字符串视为空值。
这是一个例子:
public class JacksonNull { public static class Bean { public String field1; public String field2; public Bean() {} public Bean(String field1, String field2) { this.field1 = field1; this.field2 = field2; } @Override public String toString() { return "Bean{" + "field1='" + field1 + '\'' + ", field2='" + field2 + '\'' + '}'; } } public static void main(String[] args) throws IOException { Bean bean = new Bean(null, "value"); ObjectMapper mapper = new ObjectMapper(); mapper.getSerializerProvider().setNullValueSerializer(new JsonSerializer
输出:
{"field1":"","field2":"value"} Bean{field1='null', field2='value'}
来自Jersey maillist:
还有一件事:要忽略空值,您可能还需要提供自己的Jackson ObjectMapper提供程序,并将Jackson SerializationConfig.Feature WRITE_NULL_PROPERTIES [3]设置为false。 有关如何将自定义ObjectMapper挂钩到Jersey的详细信息,请参阅[2]。
HTH,
〜的Jakub
[2] http://download.java.net/maven/2/com/sun/jersey/samples/jacksonjsonprovider/1.6-ea06/jacksonjsonprovider-1.6-ea06-project.zip [3] http://jackson.codehaus .ORG / 1.7.0 /的Javadoc /组织/ Codehaus的/jackson/地图/ SerializationConfig.Feature.html#WRITE_NULL_PROPERTIES
我想这是你的答案。