标签: spring-validator

JSR 303实现提供了ClassCastException

我正在使用JSR 303实现自定义验证批注,但出现错误。我正在关注使用Hibernate Validator(JSR 303)进行跨字段验证时提供的详细信息

java.lang.ClassCastException: com.sun.proxy.$Proxy95 cannot be cast to com.my.validator.FieldMatch
at com.my.validator.FieldMatchValidator.initialize(FieldMatchValidator.java:14) ~[classes/:na]
at org.hibernate.validator.internal.engine.constraintvalidation.ConstraintValidatorManager.initializeConstraint(ConstraintValidatorManager.java:261) ~[hibernate-validator-5.2.4.Final.jar:5.2.4.Final]
at org.hibernate.validator.internal.engine.constraintvalidation.ConstraintValidatorManager.createAndInitializeValidator(ConstraintValidatorManager.java:183) ~[hibernate-validator-5.2.4.Final.jar:5.2.4.Final]
at org.hibernate.validator.internal.engine.constraintvalidation.ConstraintValidatorManager.getInitializedValidator(ConstraintValidatorManager.java:122) ~[hibernate-validator-5.2.4.Final.jar:5.2.4.Final]
at org.hibernate.validator.internal.engine.constraintvalidation.ConstraintTree.getConstraintValidatorNoUnwrapping(ConstraintTree.java:303) ~[hibernate-validator-5.2.4.Final.jar:5.2.4.Final]
at org.hibernate.validator.internal.engine.constraintvalidation.ConstraintTree.getConstraintValidatorInstanceForAutomaticUnwrapping(ConstraintTree.java:244) ~[hibernate-validator-5.2.4.Final.jar:5.2.4.Final]
at org.hibernate.validator.internal.engine.constraintvalidation.ConstraintTree.getInitializedConstraintValidator(ConstraintTree.java:163) ~[hibernate-validator-5.2.4.Final.jar:5.2.4.Final]
at org.hibernate.validator.internal.engine.constraintvalidation.ConstraintTree.validateConstraints(ConstraintTree.java:116) ~[hibernate-validator-5.2.4.Final.jar:5.2.4.Final]
at org.hibernate.validator.internal.engine.constraintvalidation.ConstraintTree.validateConstraints(ConstraintTree.java:87) ~[hibernate-validator-5.2.4.Final.jar:5.2.4.Final]
at org.hibernate.validator.internal.metadata.core.MetaConstraint.validateConstraint(MetaConstraint.java:73) ~[hibernate-validator-5.2.4.Final.jar:5.2.4.Final]
at org.hibernate.validator.internal.engine.ValidatorImpl.validateMetaConstraint(ValidatorImpl.java:617) ~[hibernate-validator-5.2.4.Final.jar:5.2.4.Final]
Run Code Online (Sandbox Code Playgroud)

有人可以帮帮我吗?

java spring hibernate hibernate-validator spring-validator

5
推荐指数
1
解决办法
602
查看次数

如何:Spring摆脱@Validate进行自动控制器验证?

我知道@Valid注释指示spring在这个例子中根据JSR-303验证例如一个Controller参数:

@GetMapping("/test")
public TestDTO testDTO(@Valid TestDTO testDTO){
        return testDTO;
}
Run Code Online (Sandbox Code Playgroud)

但我希望能够以某种方式配置Spring以在所有控制器中启用验证,而无需明确指定@Valid注释.

这有可能吗?一些Spring配置?利用AOP?...

spring spring-mvc spring-aop spring-validator spring-boot

5
推荐指数
1
解决办法
1678
查看次数

两个日期字段之间的弹簧验证?

在我的Spring应用程序中,我Hibernate Validator用于验证目的.

当我做简单的验证时@NotEmpty,@Email...我很容易工作

但是当来到Date字段时,给出问题......

问题是在我的Jsp页面中我得到的值类型为String然后我将String转换为Date ..

听到是我的榜样......

@NotEmpty(message = "Write Some Description")
private String description;

private String fromDateMonth;

private String fromDateYear;

private String toDateMonth;

private String toDateYear;
Run Code Online (Sandbox Code Playgroud)

我正在转换这fromDateMonthfromDateYear成这是我的控制器类Date.

那么他们在Controller类中添加Validator Annotation的任何可能性是什么?

其他明智的我应该听到什么?给我建议......

java spring hibernate-validator spring-validator

4
推荐指数
2
解决办法
2万
查看次数

如何根据需要标记Spring MVC参数

我在弹簧控制器中有这种方法

@RequestMapping(value = "/updateArticle", method = RequestMethod.POST)
@ResponseBody
public void updateArticle(Long id,  String name, String description) {
  ...
}
Run Code Online (Sandbox Code Playgroud)

我希望输入ID和姓名。换句话说,如果它们是空值,则必须引发异常。

我怎样才能做到这一点?对此有任何注释吗?

谢谢

spring spring-mvc spring-validator

4
推荐指数
2
解决办法
1万
查看次数

如何从表单中的集合中选择实体?Spring MVC 和 Thymeleaf

Company中有一些User实体Set,所有用户都存储在数据库中。我想选择一些multiple-select以 HTML 形式使用的用户。使用 Thymeleaf 和 Spring(MVC、引导)。

我完全迷失了我应该使用什么。我尝试过 @InitBinder、Spring Core Converter,但没有任何效果。问题:@Controller 在 bindingResult.hasErrors() 上失败:

@控制器

@RequestMapping(value = { "/add" }, method = { RequestMethod.POST })
public String saveNew(@Validated @ModelAttribute("company") Company company, BindingResult bindingResult, Model model) {
    if (bindingResult.hasErrors())
Run Code Online (Sandbox Code Playgroud)

公司豆

public class Company {
    private Set<User> users = new HashSet<User>();
Run Code Online (Sandbox Code Playgroud)

Thymeleaf HTML 表单

<form th:object="${company}">
<select th:field="*{users}" multiple="multiple">
    <option th:each="user : ${allUsers}" th:value="${user.id}" th:text="${user.email}"></option>
</select>
Run Code Online (Sandbox Code Playgroud)

实现这种多选的正确方法是什么?

validation spring-mvc thymeleaf spring-validator

4
推荐指数
1
解决办法
2650
查看次数

使用 Spring Reactive 时如何验证 Mono

我们正在为一个项目评估 Spring 5,但不确定如何最好地验证Mono参数。传统上,我们一直使用MethodValidationPostProcessor来验证我们的方法参数,如下所示:

@Validated
@Service
public class FooService

@Validated(SignUpValidation.class)
public void signup(@Valid UserCommand userCommand) {

    ...
}
Run Code Online (Sandbox Code Playgroud)

然后我们将在ControllerAdviceor 中处理异常ErrorController,并将合适的 4xx 响应传递给客户端。

但是当我将参数更改为 时Mono,如下所示,它似乎不再起作用。

@Validated
@Service
public class FooService

@Validated(SignUpValidation.class)
public Mono<Void> signup(@Valid Mono<UserCommand> userCommand) {

    ...
}
Run Code Online (Sandbox Code Playgroud)

据我了解 Spring Reactive,可能它实际上不应该工作。那么,验证Monos 和Fluxes 然后发送合适的错误响应的Spring 5 最佳实践是什么?

spring spring-mvc spring-validator spring-boot spring-webflux

4
推荐指数
1
解决办法
6677
查看次数

Spring MVC 自定义验证显示错误代码 HV000074。

我正在尝试在 Spring Boot 中实现自定义密码匹配验证。但我收到如下错误:-

PasswordMatch 包含 Constraint 注释,但不包含消息参数

我正在关注此链接https://www.baeldung.com/registration-with-spring-mvc-and-spring-security进行自定义验证。问题是我收到了这样的错误。

javax.validation.ConstraintDefinitionException: HV000074: com.bikram.booking.validation.PasswordMatch 包含约束注释,但不包含消息参数。在 org.hibernate.validator.internal.metadata.core.ConstraintHelper.assertMessageParameterExists(ConstraintHelper.java:915)

我在网上搜索了解决方案,但找不到合适的解决方案。

我的模态是

package com.bikram.booking.dto;

import com.bikram.booking.validation.PasswordMatch;
import com.bikram.booking.validation.ValidEmail;

import javax.validation.constraints.*;

@PasswordMatch
public class UserDto {
 @NotNull
    @Size(min = 6, message = "Password should be more than 6 characters")
    @NotEmpty(message = "Please provide a password")
    private String password;


    @NotNull
    @Size(min = 6, message = "Password should be more than 6 characters")
    private String confirmPassword;
}
Run Code Online (Sandbox Code Playgroud)

我的界面是

package com.bikram.booking.validation;

import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.Documented;
import …
Run Code Online (Sandbox Code Playgroud)

java spring-mvc spring-validator spring-boot

4
推荐指数
1
解决办法
4616
查看次数

如何验证类型为List的@RequestParam的大小

我正在创建期望@RequestParam类型为Spring-Boot的微服务REST API List<String>。如何验证列表包含最小和最大数量的值?

到目前为止,我已经尝试使用@Size(min=1, max=2)应该也支持集合(javax.validation.constraints.Size)的方法。

我也尝试添加@ValidBindingResult参数以及@Size注释,但均未成功。

我更喜欢使用类似于第一个示例的解决方案,该解决方案@Size(min=1, max=2)更紧凑,更简洁。这是针对Spring-Boot 2.1.2.RELEASE的。

@RestController
public class MyApi {

    @GetMapping(value = "/myApi", produces = { APPLICATION_JSON_VALUE })
    public ResponseEntity<List<MyObject>> getSomething(@Valid @RequestParam(value = "programEndTime", required = false) @Size(min = 1, max = 2) List<String> programEndTime, BindingResult result) {
        if (result.hasErrors()) {
            System.out.println("Error");
        } else {
            System.out.println("OK");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我希望System.out.println("Error")能够达到要求,但实际上已被跳过。

java spring-validator spring-boot spring-web

4
推荐指数
1
解决办法
1009
查看次数

Spring Boot 2 和方法参数验证

我创建了以下服务接口:

import javax.validation.constraints.NotBlank;

import org.springframework.lang.NonNull;
import org.springframework.validation.annotation.Validated;

@Validated
public interface UserService {

    User create(@NonNull Long telegramId, @NotBlank String name, @NonNull Boolean isBot);

}
Run Code Online (Sandbox Code Playgroud)

但以下调用:

userService.create(telegramId, "Mike", null);
Run Code Online (Sandbox Code Playgroud)

通过参数@NotNull验证isBot。如何正确配置 Spring Boot 和我的服务,以考虑@NonNull注释并防止参数情况下的方法执行null

java spring spring-validator spring-boot

4
推荐指数
1
解决办法
1万
查看次数

Spring 验证返回长错误消息,而不仅仅是自定义消息

Spring 验证返回长错误消息而不是自定义一次。

这是 dto 中的代码部分。

public class RequestDto implements Serializable {
    @NotNull(message="{id.required}")
    private Long id;

}
Run Code Online (Sandbox Code Playgroud)

在控制器中为输入添加了@Valid。

@RequestMapping(value = ApiPath.PATH, method = RequestMethod.POST, produces = { "application/xml",
            "application/json" })
    public @ResponseBody ResultDecorator saveRequest(
            @Valid @RequestBody RequestDto msaDisabScreenRequestDto) throws Exception {

}
Run Code Online (Sandbox Code Playgroud)

API 返回以下错误。

<message>Validation failed for argument at index 0 in method: public om.gov.moh.msa.framework.resolver.ResultDecorator om.controller.MaController.saveRequest(om..dto.RequestDto) throws java.lang.Exception, with 1 error(s): [Field error in object 'requestDto' on field 'id': rejected value [null]; codes [NotNull.requestDto.id,NotNull.id,NotNull.java.lang.Long,NotNull]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [requestDto.id,id]; arguments []; default …
Run Code Online (Sandbox Code Playgroud)

spring-validator spring-boot

3
推荐指数
1
解决办法
8484
查看次数