Spring Boot 1.4自定义内部Jackson反序列化 [英] Spring Boot 1.4 Customize Internal Jackson Deserialization

查看:168
本文介绍了Spring Boot 1.4自定义内部Jackson反序列化的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用application.properties中的spring.jackson.deserialization.FAIL_ON_UNKNOWN_PROPERTIES=true来使反序列化在未知属性上失败,但是无法正常工作.

我什至尝试使用:

@Bean
ObjectMapper objectMapper() {
  return Jackson2ObjectMapperBuilder
        .json()
        .featuresToEnable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES)
        .build();
}

但这也不起作用.我想念什么?

根据杰克逊文档.

如果要禁用此设置,可以将此选项添加到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());
    }
}

未定义

title 属性.因此,控制器发送BadRequest.

I am using spring.jackson.deserialization.FAIL_ON_UNKNOWN_PROPERTIES=true in the application.properties to make deserialization fail on unknown properties but its not working.

I even tried using :

@Bean
ObjectMapper objectMapper() {
  return Jackson2ObjectMapperBuilder
        .json()
        .featuresToEnable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES)
        .build();
}

But this also didn't work. What am I missing?

解决方案

FAIL_ON_UNKNOWN_PROPERTIES option is true by default according to Jackson Documentation.

If you want to disable this setting you may add this option to application.properties.

spring.jackson.deserialization.fail-on-unknown-properties = false

But in default settings it works as expected. So no need for any setting.

This is one file spring boot application:

@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; }
    }
}

This is the integration test for testing rejection on unknown properties.

@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());
    }
}

title property is not defined. So controller sends BadRequest.

这篇关于Spring Boot 1.4自定义内部Jackson反序列化的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆