如果JSON属性为空字符串,如何在Spring中配置JSON反序列化以设置空值?

时间:2015-06-22 12:59:05

标签: java json spring json-deserialization

我为它创建了自定义JsonDeserializer,可以应用于String类型的任何字段。

public class EmptyToNullStringDeserializer extends JsonDeserializer<String> {
    @Override
    public String deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException {
        String text = jp.getText();
        return "" == text ? null : text;
    }
}

它可以用在模型中。

class SomeClass {
    @JsonDeserialize(using = EmptyToNullStringDeserializer.class)
    private String someField;
}

它转换JSON

{"someField": ""}

进入Java对象someField等于null(不是""

问题:如何创建通用JsonDeserializer,将null设置为JSON中等于""的所有Java对象字段? 它应该用作:

@JsonDeserialize(using = EmptyToNullStringDeserializer.class)
class SomeClass {
        private String someField;
}

2 个答案:

答案 0 :(得分:1)

这更像是一个杰克逊问题,而不是一个Spring问题。您只需要使用 ObjectMapper ...

注册自定义反序列化器
import org.easymock.EasyMockSupport;
import org.junit.Test;

public class ProcessMessageTest extends EasyMockSupport {

    @Test
    public void processMessage() throws Exception {
        ClassUnderTest classUnderTest = createMockBuilder(ClassUnderTest.class)
            .addMockedMethod("dispatchMessage")
            .createMock();  
        classUnderTest.dispatchMessage("some message");
        replayAll();

        classUnderTest.processMessage();

        verifyAll();
    }

}

如何访问该ObjectMap,取决于您使用的是Spring Boot还是普通的Spring。

答案 1 :(得分:1)

您需要使用ObjectMapper注册自定义反序列化器