我在弹簧启动时使用JacksonTester时遇到问题。我不想在我的序列化对象上保留null属性,所以我在application.properties和application-test.properties上都设置了这个属性。
spring.jackson.default-property-inclusion=non_null
问题是配置在默认环境中按预期工作,但未在测试环境中应用。请注意,我使用JacksonTester来测试我的代码。
这是一个显示我的问题的简短示例:
@ActiveProfiles("test")
@RunWith(SpringRunner.class)
@JsonTest
public class PanelistDTOJsonTest {
@Autowired
private JacksonTester<PanelistDTOOutput> jsonOutput;
@Test
public void testSerializeToOutputWithTokenNull() throws Exception {
PanelistDTOOutput panelist = new PanelistDTOOutput();
// This test should pass but the property spring.jackson.default-property-inclusion=non_null is ignored by JakcsonTester
assertThat(this.jsonOutput.write(panelist)).doesNotHaveEmptyJsonPathValue("@.token");
}
}
PanelistDTOOutput是一个简单的类:
public class PanelistDTOOutput {
private String token;
private String created;
private String id;
public PanelistDTOOutput() {
}
public String getToken() {
return token;
}
public void setToken(String token) {
this.token = token;
}
}
测试未通过以下错误消息传递:
java.lang.AssertionError: Expected a non-empty value at JSON path "@.token" but found: null
生成的JSON如下:
{"id":null,"created":null,"token":null}
请注意我使用的是spring-boot 1.5.4和jackson 2.9.1。