我为它创建了自定义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;
}
答案 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注册自定义反序列化器