【问题标题】:Spring MVC validation: Only one field is requiredSpring MVC 验证:只需要一个字段
【发布时间】:2021-10-12 19:35:32
【问题描述】:

我正在此 API 中创建一个新端点,它接受包含用户名或 5 或 9 位电话号码的请求。我需要添加验证以验证包含用户名或电话号码的请求;如果两者都提供,则返回验证错误。这是我当前的代码。

    @GetMapping("/users")
    @Operation(summary = "API to return users based on username or phone number")
    public ResponseEntity<List<UserResponseObject>> usersByNameOrNumber(
            @Valid @RequestParam(name = "phone-number", required = false) @Pattern(regexp = "^(\\d{5}|\\d{9})$") String userPhoneNumber,
            @Valid @PathVariable(name = "user-name", required = false) @Pattern(regexp = "^[a-zA-Z ]*$") String userName) {

            try {
                    ...
            } catch (Exception e) {
                    ...
            }
    }

如何修改此块以满足要求?目前,这两个字段都被标记为不需要,并且没有进行验证。我希望它只需要这些字段之一不为空。

【问题讨论】:

  • 这些通常应该是请求参数,而不是路径变量,您可以在请求映射中使用params= 来指定必须存在哪些参数才能匹配。

标签: java spring-boot validation annotations swagger


【解决方案1】:

尝试使用可选的,我不知道您需要什么解决方案。

@GetMapping("/users")
                @Operation(summary = "API to return users based on username or phone number")
                public ResponseEntity<List<UserResponseObject>> usersByNameOrNumber(
                        @Valid @RequestParam(value = "phoneNumber", required = false) @Pattern(regexp = "^(\\d{5}|\\d{9})$") Optional<String> phoneNumber,
                        @Valid @RequestParam(value = "userName", required = false) @Pattern(regexp = "^[a-zA-Z ]*$") Optional<String> userName) {
            
                        try {
                                        if(phoneNumber.isPresent()){} 
                                        if(userName.isPresent()){} 
                        } catch (Exception e) {
                                
                        }
                }

但我不确定@Pattern 和 Optional 是否会正常工作,但可能是的。 如果我能理解您的问题,也许会有所帮助。

【讨论】:

    猜你喜欢
    • 2011-07-21
    • 1970-01-01
    • 2015-08-18
    • 1970-01-01
    • 1970-01-01
    • 2017-05-24
    • 2014-06-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多