Spring Boot 1.4自定义内部杰克逊反序列化
我在application.properties 中使用spring.jackson.deserialization.FAIL_ON_UNKNOWN_PROPERTIES = true使未反应的属性反序列化失败,但它不起作用。Spring Boot 1.4自定义内部杰克逊反序列化
我甚至使用
@Bean
ObjectMapper objectMapper() {
return Jackson2ObjectMapperBuilder
.json()
.featuresToEnable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES)
.build();
}
尝试,但这样也没有工作。我错过了什么?
FAIL_ON_UNKNOWN_PROPERTIES
根据Jackson Documentation,选项默认为true。
如果要禁用此设置,您可以将此选项添加到application.properties
。
spring.jackson.deserialization.fail-on-unknown-properties = false
但在默认设置下,它按预期工作。所以不需要任何设置。
这是一个文件春天启动应用程序:
@RestController
@SpringBootApplication
public class TestOptionApplication {
public static void main(String[] args) {
SpringApplication.run(TestOptionApplication.class, args);
}
@PostMapping("/test")
public void formTest(@RequestBody final HelloForm form) {
}
public static class HelloForm {
private String name;
public String getName() { return name; }
public void setName(final String name) { this.name = name; }
}
}
这是对未知的性能测试排斥集成测试。
@RunWith(SpringRunner.class)
@SpringBootTest
public class TestOptionApplicationTest {
@Autowired
private WebApplicationContext context;
@Test
public void testFailOnUnknownPropertiesOption() throws Exception {
final String text = "{\"name\": \"test\", \"title\": \"test\"}";
MockMvcBuilders
.webAppContextSetup(this.context)
.build()
.perform(post("/test").contentType(MediaType.APPLICATION_JSON).content(text))
.andExpect(status().isBadRequest());
}
}
标题属性没有定义。所以控制器发送BadRequest。
感谢您的快速回复。它现在正在工作,我清除了m2缓存并重建它,也许这是一个版本问题。我会在以后检查是什么导致它。我会将其标记为答案。 – Kiba
使用Spring引导时,默认情况下,在反序列化过程中会忽略未知属性。 为了不忽略这些属性,您可以:
@Bean
public ObjectMapper objectMapper() {
return Jackson2ObjectMapperBuilder
.json()
.featuresToEnable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES)
.build();
}
使用这个bean:
@Bean
public Jackson2ObjectMapperBuilder objectMapperBuilder(){
Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder();
builder.failOnUnknownProperties(true);
return builder;
}
- 在application.properties
使用这个bean添加
spring.jackson.deserialization.FAIL_ON_UNKNOWN_PROPERTIES=true
我已经测试过这些解决方案,它的工作原理在代码中存在另一个问题。 请问,你可以发布你的代码,由javaguy提问吗?
感谢您的快速回复。它现在正在工作,我清除了m2缓存并重建它,也许这是一个版本问题。我会在以后检查是什么导致它。我无法将你和Fırat家伙的回复标记为答案。但感谢您的快速回复:)。 – Kiba
你可以发布你的代码和你试图反序列化的对象的数据吗? – developer
如果你在这个问题中定义'Jackson2ObjectMapperBuilder',它是否工作:https://*.com/questions/34545997/put-and-post-fail-on-unknown-properties-spring-different-behavior? – Infinity
@Infinity感谢您的快速回复。我也尝试过,但没有工作这是一个普通的项目与弹簧启动网页依赖和PUT请求方法来更新用户(我没有打数据库,我只是记录更新请求测试方法)和平原用户模型没有任何额外的注释。 – Kiba