java—如果在rest查询中未指定布尔值,如何将布尔值设置为nul而不是false

w46czmvw  于 2021-06-27  发布在  Java
关注(0)|答案(2)|浏览(347)

我有一个spring boot rest api,其中一个端点接收包含主体的请求,如下所示:

@GetMapping("/search")
public List<ItemDto> searchDevice(@RequestBody ItemDto itemDto){
    // code
}

dto如下所示:

@JsonInclude(JsonInclude.Include.NON_NULL)
public class ItemDto {

//other fields

@JsonProperty(value = "status")
private boolean status;

// getters and setters
}

所以我的问题是:当我发送一个不包含 status 它默认为 false ,这不是我需要的行为。我希望状态是 null ,如果未指定。我怎样才能做到这一点?
另一个有趣的行为是 statusfalse 即使我在查询中指定为 "status": null 如您所见,我已经尝试使用注解 @JsonInclude 以及 @JsonProperty ,我在类似的问题中看到过推荐,但它们对我不起作用。布尔值仍然默认为false。有其他的解决办法吗?

vohkndzv

vohkndzv1#

boolean 是一个基元类型,这意味着它不是java对象。因此,这是不可能的 null ,是真是假。您只需将其替换为等价的java对象 Boolean 然后它就可以 null . 在java中,有一个拆箱,允许在需要时在原语类型和java对象等价物(或 Package 器)之间进行无缝转换,所以您仍然可以这样做 if(yourBoolean) 如果它是一个 Boolean 但请注意,如果 yourBooleannull .
注意,这样做通常不是很好的做法,当布尔值不在这里时,您不应该有不同的逻辑 null ,因为它不再是布尔值了。如果您可以控制输入并且确实有3个状态,那么可以考虑使用枚举,因为它可能是更好的选择(或者可以使用2个布尔值)。

zkure5ic

zkure5ic2#

必须为状态变量提供布尔 Package

@JsonInclude(JsonInclude.Include.NON_NULL)
public class ItemDto {

@JsonProperty(value = "status")
private Boolean status;

// getters and setters
}

相关问题