Java 使用Spring验证是否显式定义了布尔元素

Java 使用Spring验证是否显式定义了布尔元素,java,spring,validation,boolean,bean-validation,Java,Spring,Validation,Boolean,Bean Validation,我们得到了这个REST端点,其中一个字段映射到一个布尔(包装器类)实例。我们使用布尔值而不是布尔值,因为设计决策是不可协商的 此布尔值是必需的,必须由发送方指定(“whateverValue”:“应返回400错误”),但当到达端点时,该值会自动转换为正确的假值 所以,问题是:这能做到吗?难道我们不理解使用“布尔”对象而不是原语的契约吗 编辑:为了澄清,我们已经在验证“whateverValue”:null,并且该值可以是true或false,因此,据我所知,这里既不能使用@NotNull也不能使

我们得到了这个REST端点,其中一个字段映射到一个布尔(包装器类)实例。我们使用布尔值而不是布尔值,因为设计决策是不可协商的

此布尔值是必需的,必须由发送方指定(“whateverValue”:“应返回400错误”),但当到达端点时,该值会自动转换为正确的假值

所以,问题是:这能做到吗?难道我们不理解使用“布尔”对象而不是原语的契约吗


编辑:为了澄清,我们已经在验证“whateverValue”:null,并且该值可以是true或false,因此,据我所知,这里既不能使用@NotNull也不能使用@AssertTrue/false。

如果要验证应该使用的对象类型Boolean

这是一个以前有人问过的问题。 如果一个布尔值被设置为ans@AssertTrue/false,则我使用@NotNull来验证传入值是否具有特定状态。
希望这有帮助

我将您的场景编码如下,一切正常

如果我(从您的场景中)的理解不正确,请纠正我。

创建DTO

创建端点

使用Postman,当我发送testValue:”时,它抛出一个notnull异常,这意味着服务器已经收到null,并且没有nullfalse的转换。(它工作正常!)

服务器响应如下所示


你能提供控制器方法签名,也许还有验证逻辑吗?@SiSi没有太多要提供的,只是一个标准的@RequestBody注释类,它有一个“field”:“value”对,但Spring似乎自动将“field”:“”转换为“field:”false“。我本来希望能够找到一种使用自定义验证器进行验证的方法,但是当它到达validator类时,它已经有了一个“false”值。我记得在我的项目中,我们在签名处确定了输入类型,如所需参数的“Boolean”。您尝试过类似的方法吗?好的,我们不能,因为方法声明(映射到/任何端点的函数)上的类型是pojo,带有元素声明(如果值本身为空,则似乎Spring映射到默认值)。也许您可以将Json设置为忽略null,然后使用@JsonCreator构建一个构造函数,而不使用将其设置为null的布尔字段。我们已经在使用它,但它仅在请求为“value”:null时才起作用。我遇到的问题是,请求是“value”:“”,它会自动转换为“value”:“false”。此外,它可以是true也可以是false,因此我们不能使用@assertrve/false
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown = true)
public class TestDto {

@NotNull
Boolean testValue;

//getter and setter

}
@RestController
public class testController {

@RequestMapping(value = "/test", method = RequestMethod.POST)
public void accountTrades(@RequestBody @Valid TestDto testDto) {

    System.out.println(testDto.getTestValue());

  }

}