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

創(chuàng)新互聯(lián)是一家專注于網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)與策劃設(shè)計(jì),井岡山網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)十載,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:井岡山等地區(qū)。井岡山做網(wǎng)站價(jià)格咨詢:028-86922220
問題分析
1、確認(rèn)注解使用正確
我們需要確認(rèn)@NotEmpty注解的使用是否正確,在SpringBoot中,我們可以在字段或參數(shù)前添加@NotEmpty注解,以表示該字段或參數(shù)不能為空。
public class User {
@NotEmpty(message = "用戶名不能為空")
private String username;
}
2、檢查依賴版本
我們需要檢查項(xiàng)目中的依賴版本是否正確。@NotEmpty注解是Java Bean Validation(JSR 303)規(guī)范的一部分,因此我們需要引入Hibernate Validator作為驗(yàn)證器,在SpringBoot項(xiàng)目中,我們通常使用Maven或Gradle來管理依賴,請(qǐng)確保項(xiàng)目的依賴中包含以下內(nèi)容:
spring-boot-starter-validation:用于引入Hibernate Validator驗(yàn)證器。
hibernate-validator:用于實(shí)現(xiàn)Java Bean Validation規(guī)范。
javax.validation:用于定義Java Bean Validation的API。
如果發(fā)現(xiàn)依賴版本不正確,可以通過修改項(xiàng)目的pom.xml或build.gradle文件來更新依賴版本。
解決方案
1、確保實(shí)體類上有相應(yīng)的注解
在使用@NotEmpty注解之前,需要確保實(shí)體類上有相應(yīng)的注解,我們可以在實(shí)體類上添加@Entity注解,以表示這是一個(gè)數(shù)據(jù)庫表對(duì)應(yīng)的實(shí)體類,我們還需要為實(shí)體類的字段添加相應(yīng)的注解,如@Id、@GeneratedValue等,這樣,Hibernate才能識(shí)別這些實(shí)體類和字段,從而正確地進(jìn)行數(shù)據(jù)驗(yàn)證。
2、配置驗(yàn)證器
在使用@NotEmpty注解之前,需要先配置驗(yàn)證器,在SpringBoot項(xiàng)目中,我們可以通過實(shí)現(xiàn)Validator接口來自定義驗(yàn)證器,我們可以創(chuàng)建一個(gè)名為MyValidator的類,并實(shí)現(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 在上述代碼中,我們首先導(dǎo)入了所需的依賴包,然后實(shí)現(xiàn)了Validator接口,在validate方法中,我們使用了Hibernate提供的ValidatorFactory來獲取默認(rèn)的驗(yàn)證器實(shí)例,并對(duì)目標(biāo)對(duì)象進(jìn)行驗(yàn)證,我們將驗(yàn)證結(jié)果添加到Errors對(duì)象中。
3、在Controller中使用驗(yàn)證器
在使用@NotEmpty注解之前,需要在Controller中注冊(cè)自定義的驗(yàn)證器,在SpringBoot項(xiàng)目中,我們可以通過實(shí)現(xiàn)WebMvcConfigurer接口來自定義MVC配置,我們可以創(chuàng)建一個(gè)名為MyWebMvcConfigurer的類,并實(shí)現(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;
/**
* 將自定義的驗(yàn)證器添加到全局的攔截器鏈中
*/
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new LocaleChangeInterceptor()) //添加LocaleChangeInterceptor攔截器處理語言切換問題(防止亂碼)不放在這里!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!不然會(huì)報(bào)錯(cuò)找不到LocaleChangeInterceptor攔截器的錯(cuò)誤信息~_~) //這里為了演示所以注釋掉LocaleChangeInterceptor攔截器的添加(因?yàn)檫@個(gè)攔截器是用來處理語言切換問題的)不放在這里以免影響本示例的演示效果~_~)//注意不要忘記最后要執(zhí)行super方法哦^_^~ 返回null即可不加入任何攔截器~_~) //這里為了演示所以注釋掉LocaleChangeInterceptor攔截器的添加(因?yàn)檫@個(gè)攔截器是用來處理語言切換問題的)不放在這里以免影響本示例的演示效果~_~)//注意不要忘記最后要執(zhí)行super方法哦^_^~ 返回null即可不加入任何攔截器~_~) //這里為了演示所以注釋掉LocaleChangeInterceptor攔截器的添加(因?yàn)檫@個(gè)攔截器是用來處理語言切換問題的)不放在這里以免影響本示例的演示效果~_~)//注意不要忘記最后要執(zhí)行super方法哦^_^~ 返回null即可不加入任何攔截器~_~) //這里為了演示所以注釋掉LocaleChangeInterceptor攔截器的添加(因?yàn)檫@個(gè)攔截器是用來處理語言切換問題的)不放在這里以免影響本示例的演示效果~_~)//注意不要忘記最后要執(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://轉(zhuǎn)換成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://轉(zhuǎn)換成List類型 return Arrays$.asList(MediaType$.APPLICATION_JSON); } @Override protected Charset getCharset() { return CharsetUtility$.UTF_8//return null//; }
網(wǎng)頁標(biāo)題:SpringBoot中notempty注解不生效如何解決
本文路徑:http://m.fisionsoft.com.cn/article/coddded.html


咨詢
建站咨詢
