Spring Boot Jackson,将布尔字段的空值或null值默认为false

bnlyeluc  于 2023-03-12  发布在  Spring
关注(0)|答案(1)|浏览(364)

我正在使用KotlinSpringboot堆栈,在rest控制器中,我们有一个请求主体模型,其中字段***“isAgent”布尔值*。
如果请求没有这个布尔字段,则请求失败。
我们检查了,如果我们在字段上注解@JsonProperty(required = true)。Jackson失败,表示未传递required参数,这与ask内联。但是,当字段使用“”OR““OR Null值传递时,Jackson将默认为false,但我们希望此操作失败。
任何想法如何在SpringBott中实现这一点,而不实现自定义的反序列化器。

zbsbpyhn

zbsbpyhn1#

您可以定义将DeserializationFeature.FAIL_ON_NULL_FOR_PRIMITIVES设置为true的自定义ObjectMapper Bean

import com.fasterxml.jackson.databind.DeserializationFeature
import com.fasterxml.jackson.databind.ObjectMapper

import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration
import org.springframework.context.annotation.Primary

@Configuration
class JacksonConfig

    @Bean
    @Primary
    fun objectMapper(): ObjectMapper {
        return ObjectMapper()
            .configure(DeserializationFeature.FAIL_ON_NULL_FOR_PRIMITIVES, true)
    }
}

如果isUserAgent缺失、为null或为空,则类似下面的Request类将无法进行反序列化

data class Request(
    @JsonProperty(value = "isUserAgent", required = true)
    val userAgentSpecified: Boolean,
)

验证反序列化的测试可在github上找到

相关问题