如果 @RequestBody 中不存在,则 boolean 设置为 false

She*_*riy 5 java rest spring-boot

我偶然发现了一个有趣的案例,但我不知道如何解决它。这可能与布尔字段的 JSON Post 请求默认发送 false有关,但该文章的建议没有帮助。

假设我有这门课:

public class ReqBody {
    @NotNull
    @Pattern(regexp = "^[0-9]{10}$")
    private String phone;
    //other fields
    @NotNull
    @JsonProperty(value = "create_anonymous_account")
    private Boolean createAnonymousAccount = null;
    //constructors, getters and setters
    public Boolean getCreateAnonymousAccount() {
        return createAnonymousAccount;
    }

    public void setCreateAnonymousAccount(Boolean createAnonymousAccount) {
        this.createAnonymousAccount = createAnonymousAccount;
    }
}
Run Code Online (Sandbox Code Playgroud)

我也有端点:

@PostMapping(value = "/test", consumes = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<MyOutput> test(
            @ApiParam(value = "information", required = true) @RequestBody ReqBody input
    ) {
//do something
}
Run Code Online (Sandbox Code Playgroud)

问题是当我将请求正文发送为:

{
"phone": "0000000006",
 "create_anonymous_account": null
}
Run Code Online (Sandbox Code Playgroud)

或者就像

{
"phone": "0000000006"
}
Run Code Online (Sandbox Code Playgroud)

它将 createAnonymousAccount 设置为 false。

我检查过,它正确识别"create_anonymous_account": true

有没有办法在布尔字段中“强制”空值?

我真的需要知道它是否已发送,并且没有默认值。

das*_*sum 4

您可以使用 Jackson 注释来忽略空字段。如果调用者没有发送 createAnonymousAccount 则它将为空。

@JsonInclude(JsonInclude.Include.NON_NULL)
public class ReqBody {
    @NotNull
    @Pattern(regexp = "^[0-9]{10}$")
    private String phone;
    //other fields

    @JsonProperty(value = "create_anonymous_account")
    private Boolean createAnonymousAccount ;
}
Run Code Online (Sandbox Code Playgroud)