日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
SpringBoot中notempty注解不生效如何解決

技術(shù)介紹

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

創(chuàng)新互聯(lián)是一家專(zhuān)注于網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)與策劃設(shè)計(jì),井岡山網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)做網(wǎng)站,專(zhuān)注于網(wǎng)站建設(shè)十載,網(wǎng)設(shè)計(jì)領(lǐng)域的專(zhuān)業(yè)建站公司;建站業(yè)務(wù)涵蓋:井岡山等地區(qū)。井岡山做網(wǎng)站價(jià)格咨詢:028-86922220

問(wèn)題分析

1、確認(rèn)注解使用正確

我們需要確認(rèn)@NotEmpty注解的使用是否正確,在SpringBoot中,我們可以在字段或參數(shù)前添加@NotEmpty注解,以表示該字段或參數(shù)不能為空。

public class User {
    @NotEmpty(message = "用戶名不能為空")
    private String username;
}

2、檢查依賴(lài)版本

我們需要檢查項(xiàng)目中的依賴(lài)版本是否正確。@NotEmpty注解是Java Bean Validation(JSR 303)規(guī)范的一部分,因此我們需要引入Hibernate Validator作為驗(yàn)證器,在SpringBoot項(xiàng)目中,我們通常使用Maven或Gradle來(lái)管理依賴(lài),請(qǐng)確保項(xiàng)目的依賴(lài)中包含以下內(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)依賴(lài)版本不正確,可以通過(guò)修改項(xiàng)目的pom.xml或build.gradle文件來(lái)更新依賴(lài)版本。

解決方案

1、確保實(shí)體類(lèi)上有相應(yīng)的注解

在使用@NotEmpty注解之前,需要確保實(shí)體類(lèi)上有相應(yīng)的注解,我們可以在實(shí)體類(lèi)上添加@Entity注解,以表示這是一個(gè)數(shù)據(jù)庫(kù)表對(duì)應(yīng)的實(shí)體類(lèi),我們還需要為實(shí)體類(lèi)的字段添加相應(yīng)的注解,如@Id@GeneratedValue等,這樣,Hibernate才能識(shí)別這些實(shí)體類(lèi)和字段,從而正確地進(jìn)行數(shù)據(jù)驗(yàn)證。

2、配置驗(yàn)證器

在使用@NotEmpty注解之前,需要先配置驗(yàn)證器,在SpringBoot項(xiàng)目中,我們可以通過(guò)實(shí)現(xiàn)Validator接口來(lái)自定義驗(yàn)證器,我們可以創(chuàng)建一個(gè)名為MyValidator的類(lèi),并實(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 violation : violations) {
            errors.rejectValue(violation.getPropertyPath().toString(), violation.getMessage());
        }
    }
}

在上述代碼中,我們首先導(dǎo)入了所需的依賴(lài)包,然后實(shí)現(xiàn)了Validator接口,在validate方法中,我們使用了Hibernate提供的ValidatorFactory來(lái)獲取默認(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)目中,我們可以通過(guò)實(shí)現(xiàn)WebMvcConfigurer接口來(lái)自定義MVC配置,我們可以創(chuàng)建一個(gè)名為MyWebMvcConfigurer的類(lèi),并實(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攔截器處理語(yǔ)言切換問(wèn)題(防止亂碼)不放在這里!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!不然會(huì)報(bào)錯(cuò)找不到LocaleChangeInterceptor攔截器的錯(cuò)誤信息~_~)     //這里為了演示所以注釋掉LocaleChangeInterceptor攔截器的添加(因?yàn)檫@個(gè)攔截器是用來(lái)處理語(yǔ)言切換問(wèn)題的)不放在這里以免影響本示例的演示效果~_~)//注意不要忘記最后要執(zhí)行super方法哦^_^~                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        返回null即可不加入任何攔截器~_~)     //這里為了演示所以注釋掉LocaleChangeInterceptor攔截器的添加(因?yàn)檫@個(gè)攔截器是用來(lái)處理語(yǔ)言切換問(wèn)題的)不放在這里以免影響本示例的演示效果~_~)//注意不要忘記最后要執(zhí)行super方法哦^_^~                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                返回null即可不加入任何攔截器~_~)     //這里為了演示所以注釋掉LocaleChangeInterceptor攔截器的添加(因?yàn)檫@個(gè)攔截器是用來(lái)處理語(yǔ)言切換問(wèn)題的)不放在這里以免影響本示例的演示效果~_~)//注意不要忘記最后要執(zhí)行super方法哦^_^~                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            返回null即可不加入任何攔截器~_~)     //這里為了演示所以注釋掉LocaleChangeInterceptor攔截器的添加(因?yàn)檫@個(gè)攔截器是用來(lái)處理語(yǔ)言切換問(wèn)題的)不放在這里以免影響本示例的演示效果~_~)//注意不要忘記最后要執(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類(lèi)型 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類(lèi)型 return Arrays$.asList(MediaType$.APPLICATION_JSON);                                        }                                        @Override protected Charset getCharset()                                        { return CharsetUtility$.UTF_8//return null//;                                        }

標(biāo)題名稱(chēng):SpringBoot中notempty注解不生效如何解決
當(dāng)前URL:http://m.5511xx.com/article/coddded.html