【发布时间】:2019-09-07 18:02:32
【问题描述】:
hibernate-validator 在我的 Spring Boot 项目的服务层中不起作用。
我的领域模型:
@Data
public class IssueAttachmentDto extends AttachmentDto {
@NotEmpty
private String issueId;
}
@Data
public class AttachmentDto {
/**
* Only allow digit 1~5
*/
@NotEmpty
@Pattern(regexp = "\\b[1-5]\\b")
private String attachmentType;
@NotEmpty
@Valid
private FileDto fileDto;
}
@Data
public class FileDto extends BaseDto {
@NotEmpty
private String fileType;
/**
* Only allow positive integer
*/
@NotEmpty
@Pattern(regexp = "^[0-9]*[1-9][0-9]*$")
private Long fileSize;
@NotEmpty
private String fileKey;
@NotEmpty
private String fileName;
}
我的服务等级:
@Slf4j
@Service
@Validated
public class AttachmentServiceImpl implements AttachmentService {
@Override
public void uploadAttachment(IssueAttachmentDto issueAttachmentDto) {
try {
checkUploadAttachmentArgument(issueAttachmentDto);
} catch (Exception e) {
e.printStackTrace();
throw e;
}
// something else...
}
private void checkUploadAttachmentArgument(@Valid IssueAttachmentDto issueAttachmentDto) {
// something else
}
}
我的配置类:
@Configuration
public class ConversionConfig {
@Bean
public ConversionService conversionService() {
return new DefaultConversionService();
}
}
无论我通过什么方法checkUploadAttachmentArgument(@Valid IssueAttachmentDto issueAttachmentDto) 都不会抛出异常。在我的假设中,当我传递非法数据时,它会抛出一个 ConstraintViolationException 。我的代码或配置有什么问题,请帮助我。
【问题讨论】:
-
首先您可以删除
@Validated注释,该注释无用,它用于验证组。你的类路径中是否有 Hibernate 验证器或任何其他验证器? -
@ThomasAndolf 是的,我确信我的验证器在我的类路径中。如果不是这样,我该如何编译上面的代码?
-
您可以编译代码,因为您使用的是 spring 注释和 JSR-303 特定的注释。您可以毫无问题地使用这些注释,而无需在类路径上进行任何底层验证实现,因为这些只是规范注释。它们不是实际的实现。既然你还没有发布你的 pom.xml 我不得不清除它。
-
感谢您的信赖。最后,我通过手动新建一个验证器解决了我的问题,并使用这个验证器来验证我的 bean。
标签: java spring-boot hibernate-validator