新聞中心
技術介紹
SpringBoot是一個基于Spring框架的快速開發(fā)平臺,它簡化了傳統(tǒng)Spring應用的初始搭建以及開發(fā)過程,在SpringBoot中,我們可以使用注解來配置和驗證數(shù)據(jù),其中@NotEmpty注解就是一個常用的驗證工具,有時候在使用@NotEmpty注解時,會發(fā)現(xiàn)它不生效,導致數(shù)據(jù)驗證失敗,本文將介紹如何解決SpringBoot中@NotEmpty注解不生效的問題。

創(chuàng)新互聯(lián)是一家專注于網(wǎng)站設計、成都網(wǎng)站建設與策劃設計,井岡山網(wǎng)站建設哪家好?創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設十載,網(wǎng)設計領域的專業(yè)建站公司;建站業(yè)務涵蓋:井岡山等地區(qū)。井岡山做網(wǎng)站價格咨詢:028-86922220
問題分析
1、確認注解使用正確
我們需要確認@NotEmpty注解的使用是否正確,在SpringBoot中,我們可以在字段或參數(shù)前添加@NotEmpty注解,以表示該字段或參數(shù)不能為空。
public class User {
@NotEmpty(message = "用戶名不能為空")
private String username;
}
2、檢查依賴版本
我們需要檢查項目中的依賴版本是否正確。@NotEmpty注解是Java Bean Validation(JSR 303)規(guī)范的一部分,因此我們需要引入Hibernate Validator作為驗證器,在SpringBoot項目中,我們通常使用Maven或Gradle來管理依賴,請確保項目的依賴中包含以下內容:
spring-boot-starter-validation:用于引入Hibernate Validator驗證器。
hibernate-validator:用于實現(xiàn)Java Bean Validation規(guī)范。
javax.validation:用于定義Java Bean Validation的API。
如果發(fā)現(xiàn)依賴版本不正確,可以通過修改項目的pom.xml或build.gradle文件來更新依賴版本。
解決方案
1、確保實體類上有相應的注解
在使用@NotEmpty注解之前,需要確保實體類上有相應的注解,我們可以在實體類上添加@Entity注解,以表示這是一個數(shù)據(jù)庫表對應的實體類,我們還需要為實體類的字段添加相應的注解,如@Id、@GeneratedValue等,這樣,Hibernate才能識別這些實體類和字段,從而正確地進行數(shù)據(jù)驗證。
2、配置驗證器
在使用@NotEmpty注解之前,需要先配置驗證器,在SpringBoot項目中,我們可以通過實現(xiàn)Validator接口來自定義驗證器,我們可以創(chuàng)建一個名為MyValidator的類,并實現(xiàn)Validator接口:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.validation.Errors;
import org.springframework.validation.Validator;
import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.ValidatorFactory;
import java.util.Set;
@Component
public class MyValidator implements Validator {
@Autowired
private static final ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
@Override
public boolean supports(Class> clazz) {
return true;
}
@Override
public void validate(Object target, Errors errors) {
Validator validate = factory.getValidator();
Set> violations = validate.validate(target);
for (ConstraintViolation 在上述代碼中,我們首先導入了所需的依賴包,然后實現(xiàn)了Validator接口,在validate方法中,我們使用了Hibernate提供的ValidatorFactory來獲取默認的驗證器實例,并對目標對象進行驗證,我們將驗證結果添加到Errors對象中。
3、在Controller中使用驗證器
在使用@NotEmpty注解之前,需要在Controller中注冊自定義的驗證器,在SpringBoot項目中,我們可以通過實現(xiàn)WebMvcConfigurer接口來自定義MVC配置,我們可以創(chuàng)建一個名為MyWebMvcConfigurer的類,并實現(xiàn)WebMvcConfigurer接口:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import javax.validation.Validator;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
@Configuration
@EnableWebMvc
public class MyWebMvcConfigurer implements WebMvcConfigurer {
@Autowired
private MyValidator myValidator;
/**
* 將自定義的驗證器添加到全局的攔截器鏈中
*/
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new LocaleChangeInterceptor()) //添加LocaleChangeInterceptor攔截器處理語言切換問題(防止亂碼)不放在這里!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!不然會報錯找不到LocaleChangeInterceptor攔截器的錯誤信息~_~) //這里為了演示所以注釋掉LocaleChangeInterceptor攔截器的添加(因為這個攔截器是用來處理語言切換問題的)不放在這里以免影響本示例的演示效果~_~)//注意不要忘記最后要執(zhí)行super方法哦^_^~ 返回null即可不加入任何攔截器~_~) //這里為了演示所以注釋掉LocaleChangeInterceptor攔截器的添加(因為這個攔截器是用來處理語言切換問題的)不放在這里以免影響本示例的演示效果~_~)//注意不要忘記最后要執(zhí)行super方法哦^_^~ 返回null即可不加入任何攔截器~_~) //這里為了演示所以注釋掉LocaleChangeInterceptor攔截器的添加(因為這個攔截器是用來處理語言切換問題的)不放在這里以免影響本示例的演示效果~_~)//注意不要忘記最后要執(zhí)行super方法哦^_^~ 返回null即可不加入任何攔截器~_~) //這里為了演示所以注釋掉LocaleChangeInterceptor攔截器的添加(因為這個攔截器是用來處理語言切換問題的)不放在這里以免影響本示例的演示效果~_~)//注意不要忘記最后要執(zhí)行super方法哦^_^~ if (myValidator != null && registry instanceof DefaultHandlerMethodArgumentResolver) { registry instanceof DefaultHandlerMethodArgumentResolver defaultHandlerMethodArgumentResolver = (DefaultHandlerMethodArgumentResolver) registry; defaultHandlerMethodArgumentResolvers = new CopyOnWriteArrayList<>(defaultHandlerMethodArgumentResolvers); defaultHandlerMethodArgumentResolvers.add((RequestBodyArgumentResolver) myValidator); } else if (registry instanceof RequestBodyArgumentResolver) { registry instanceof RequestBodyArgumentResolver requestBodyArgumentResolver = (RequestBodyArgumentResolver) registry; requestBodyArgumentResolvers = new CopyOnWriteArrayList<>(requestBodyArgumentResolvers); requestBodyArgumentResolvers.add((RequestBodyArgumentResolver) myValidator); } else if (registry instanceof HttpMessageConverter>) { registry instanceof HttpMessageConverter> httpMessageConverter = (HttpMessageConverter>) registry; httpMessageConverters = new ArrayList<>(httpMessageConverters); for (HttpMessageConverter> converter : httpMessageConverters) { if (converter instanceof FormHttpMessageConverter || converter instanceof JsonHttpMessageConverter || converter instanceof MultipartFormDataHttpMessageConverter || converter instanceof StringHttpMessageConverter) { converter = new FormHttpMessageConverter() { @Override public List getSupportedMediaTypes() { return Arrays://轉換成List類型 return Arrays$.asList(MediaType$.APPLICATION_JSON); } @Override protected Charset getCharset() { return CharsetUtility$.UTF_8; } }; httpMessageConvertersAdd((RequestBodyHttpMessageConverter) converter); } else if (converter instanceof ResourceHttpMessageConverter && converter instanceof FormHttpMessageConverter) { converter = new ResourceHttpMessageConverter() { @Override public List getSupportedMediaTypes() { return Arrays://轉換成List類型 return Arrays$.asList(MediaType$.APPLICATION_JSON); } @Override protected Charset getCharset() { return CharsetUtility$.UTF_8//return null//; }
網(wǎng)站題目:SpringBoot中notempty注解不生效如何解決
文章網(wǎng)址:http://www.dlmjj.cn/article/coddded.html


咨詢
建站咨詢
