【问题标题】:Springboot @Valid annotation with String object带有字符串对象的 Spring Boot @Valid 注释
【发布时间】:2021-09-24 18:43:28
【问题描述】:

所以,我有以下控制器方法:

@RequestMapping(path = "/{application}/users", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
public MyObject getUsers(@RequestParam("itemId") String itemId, @PathVariable("application") String application) {
    return userService.get(itemId, application);
}

我想检查请求参数itemId是否存在于相关的应用程序中(在路径中)。

我的第一个想法是创建一个验证器:

@RequestMapping(path = "/{application}/users", method = RequestMethod.GET, produces = 
MediaType.APPLICATION_JSON_VALUE)
@CheckItemId
public MyObject getUsers(@RequestParam("itemId") String itemId, @PathVariable("application") String application) {
    return userService.get(itemId, application);
}

CheckItemId.java:

@Target({METHOD})
@Retention(RUNTIME)
@Constraint(validatedBy = CheckItemIdValidator.class)
@Documented
public @interface CheckItemId {
    String message() default "error";
    Class<?>[] groups() default {};
    Class<? extends Payload>[] payload() default {};
}

CheckItemIdValidator.java:

@SupportedValidationTarget(ValidationTarget.PARAMETERS)
public class CheckItemIdValidator implements ConstraintValidator<CheckItemId, Object[]>{


    @Override
    public boolean isValid(Object[] arg0, ConstraintValidatorContext arg1) {
        String itemId= (String) arg0[0];
        String application = (String) arg0[1];

        // Logic business ...
        return true;
    }
}

这个实现效果很好,我设法在验证器中获得了 itemIdapplication 值。我现在可以进行验证了。

我想知道是否有更好的方法来做类似的事情?由于我处理一个对象数组,我需要将其转换为字符串,如果我更改参数顺序,我将不会得到相同的值,因为我需要使用 arg0[0] 和 arg0[1]。

谢谢!

【问题讨论】:

  • 这取决于业务逻辑。如果您正在执行简单的检查,例如(最小值或最大值检查、最大值或最小值检查、空值检查),那么您可以使用 hibernator 验证器 API。如果业务逻辑复杂,那应该没问题。

标签: spring validation methods parameters


【解决方案1】:

您可以使用弹簧验证库。在控制器级别添加@Valid。然后在方法级别添加@NotBlank,如下所示。

getUsers(@RequestParam("itemId") @NotBlank String itemId)

【讨论】:

    猜你喜欢
    • 2021-06-23
    • 1970-01-01
    • 1970-01-01
    • 2021-04-27
    • 2019-06-15
    • 2016-10-18
    • 1970-01-01
    • 2015-01-15
    • 2020-10-30
    相关资源
    最近更新 更多