我正在使用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)
有人可以帮帮我吗?
我知道@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应用程序中,我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)
我正在转换这fromDateMonth和fromDateYear成这是我的控制器类Date.
那么他们在Controller类中添加Validator Annotation的任何可能性是什么?
其他明智的我应该听到什么?给我建议......
我在弹簧控制器中有这种方法
@RequestMapping(value = "/updateArticle", method = RequestMethod.POST)
@ResponseBody
public void updateArticle(Long id, String name, String description) {
...
}
Run Code Online (Sandbox Code Playgroud)
我希望输入ID和姓名。换句话说,如果它们是空值,则必须引发异常。
我怎样才能做到这一点?对此有任何注释吗?
谢谢
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)
实现这种多选的正确方法是什么?
我们正在为一个项目评估 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
我正在尝试在 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) 我正在创建期望@RequestParam类型为Spring-Boot的微服务REST API List<String>。如何验证列表包含最小和最大数量的值?
到目前为止,我已经尝试使用@Size(min=1, max=2)应该也支持集合(javax.validation.constraints.Size)的方法。
我也尝试添加@Valid和BindingResult参数以及@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")能够达到要求,但实际上已被跳过。
我创建了以下服务接口:
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?
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 ×10
spring ×6
spring-boot ×6
java ×5
spring-mvc ×5
hibernate ×1
spring-aop ×1
spring-web ×1
thymeleaf ×1
validation ×1