我有一个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
,如果未指定。我怎样才能做到这一点?
另一个有趣的行为是 status
是 false
即使我在查询中指定为 "status": null
如您所见,我已经尝试使用注解 @JsonInclude
以及 @JsonProperty
,我在类似的问题中看到过推荐,但它们对我不起作用。布尔值仍然默认为false。有其他的解决办法吗?
2条答案
按热度按时间vohkndzv1#
boolean
是一个基元类型,这意味着它不是java对象。因此,这是不可能的null
,是真是假。您只需将其替换为等价的java对象Boolean
然后它就可以null
. 在java中,有一个拆箱,允许在需要时在原语类型和java对象等价物(或 Package 器)之间进行无缝转换,所以您仍然可以这样做if(yourBoolean)
如果它是一个Boolean
但请注意,如果yourBoolean
是null
.注意,这样做通常不是很好的做法,当布尔值不在这里时,您不应该有不同的逻辑
null
,因为它不再是布尔值了。如果您可以控制输入并且确实有3个状态,那么可以考虑使用枚举,因为它可能是更好的选择(或者可以使用2个布尔值)。zkure5ic2#
必须为状态变量提供布尔 Package