首页 > 代码库 > [FAQ]jackson解决:null到"", 空值处理为空串

[FAQ]jackson解决:null到"", 空值处理为空串

1.一个比较头疼的问题:

jackson + spring 支持rest接口,输出的JSON 对于null的字符串是invoiceTitlenull,但是接受方希望返回的是invoiceTitle: ""。解决方法重写ObjectMapper


2.代码如下:

	public JsonMapper() {
		//this(Include.NON_EMPTY);
		// 空值处理为空串
				this.getSerializerProvider().setNullValueSerializer(
						new JsonSerializer<Object>() {
							@Override
							public void serialize(Object value, JsonGenerator jgen,
									SerializerProvider provider) throws IOException,
									JsonProcessingException {
								jgen.writeString("");
							}
						});
	}


3.配置如下:

<mvc:annotation-driven content-negotiation-manager="contentNegotiationManager">
		<mvc:message-converters register-defaults="true">
			<!-- 将StringHttpMessageConverter的默认编码设为UTF-8 -->
			<bean class="org.springframework.http.converter.StringHttpMessageConverter">
		    	<constructor-arg value=http://www.mamicode.com/"UTF-8" />>
这样之后,还是不能自动匹配规则把整个的JOSN转为:invoiceTitlenull,》invoiceTitle: ""

只能通过下面实例实现解决这个问题。

brf.setResultCode(0);
		brf.setRows(orderBlocks);
		brf.setResultMessage("succeed");
		JsonMapper jsonMapper = new JsonMapper();
		return jsonMapper.toJson(brf);

注意使用这种方式需要手动设置编码如下:

@RequestMapping(method = RequestMethod.GET, value = http://www.mamicode.com/"/test",produces = "application/json; charset=utf-8")


不知为毛,不定位了。