最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot參數(shù)校驗(yàn)與國(guó)際化使用教程

 更新時(shí)間:2020年11月24日 12:13:05   作者:weisen  
這篇文章主要給大家介紹了關(guān)于SpringBoot參數(shù)校驗(yàn)與國(guó)際化使用教程的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

一、參數(shù)校驗(yàn)

springboot 使用校驗(yàn)框架validation校驗(yàn)方法的入?yún)?/p>

SpringBoot的Web組件內(nèi)部集成了hibernate-validator,所以我們這里并不需要額外的為驗(yàn)證再導(dǎo)入其他的包。

1、bean 中添加標(biāo)簽

標(biāo)簽需要加在屬性上,@NotEmpty標(biāo)簽String的參數(shù)不能為空

@Data
public class DemoDto {

 @NotEmpty(message = "名稱不能為空")
 private String name;

 @Length(min = 5, max = 25, message = "key的長(zhǎng)度為5-25")
 private String key;

 @Pattern(regexp = "[012]", message = "無效的狀態(tài)標(biāo)志")
 private String state;

}

2、Controller中開啟驗(yàn)證

在Controller 中 請(qǐng)求參數(shù)上添加@Validated 標(biāo)簽開啟驗(yàn)證

 @RequestMapping("test")
 public String test(@Valid @RequestBody DemoDto dto){
 System.out.println("test....................");
 return "test.........................";
 }

測(cè)試返回結(jié)果

{
    "timestamp": "2020-01-14 13:30:03",
    "status": 400,
    "error": "Bad Request",
    "errors": [
        {
            "codes": [
                "Length.demoDto.key",
                "Length.key",
                "Length.java.lang.String",
                "Length"
            ],
            "arguments": [
                {
                    "codes": [
                        "demoDto.key",
                        "key"
                    ],
                    "arguments": null,
                    "defaultMessage": "key",
                    "code": "key"
                },
                25,
                5
            ],
            "defaultMessage": "key的長(zhǎng)度為5-25",
            "objectName": "demoDto",
            "field": "key",
            "rejectedValue": "11",
            "bindingFailure": false,
            "code": "Length"
        },
        {...},
        {...}
    ],
    "message": "Validation failed for object='demoDto'. Error count: 3",
    "path": "/test"
}

返回的錯(cuò)誤信息比較亂,需要統(tǒng)一整理,這個(gè)時(shí)候可以使用全局異常處理的方法

3、異常處理,捕獲錯(cuò)誤信息

當(dāng)驗(yàn)證不通過時(shí)會(huì)拋異常出來。在異常處理器中捕獲異常信息(因?yàn)轵?yàn)證不通過的項(xiàng)可能是多個(gè)所以統(tǒng)一捕獲處理),并拋給前端。(此處是前后端分離開發(fā))

@RequestMapping("test")
 public ResultBean test(@Valid @RequestBody DemoDto dto){
 System.out.println("test....................");
 return new ResultBean("test.........................");
 }

這里統(tǒng)一返回一個(gè)自定義的ResultBean類型

@Slf4j
@RestControllerAdvice
public class GlobalExceptionHandler {


 @ExceptionHandler(value = MethodArgumentNotValidException.class)
 public ResultBean methodArgumentNotValid(HttpServletRequest req, MethodArgumentNotValidException ex) {
 ResultBean result = ResultBean.FAIL;
 List<ObjectError> errors =ex.getBindingResult().getAllErrors();
 StringBuffer errorMsg=new StringBuffer();
 errors.stream().forEach(x -> errorMsg.append(x.getDefaultMessage()).append(";"));
 log.error("---MethodArgumentNotValidException Handler--- ERROR: {}", errorMsg.toString());
 result.setMsg(errorMsg.toString());
 return result;
 }
}

此時(shí)的返回結(jié)果為:

{
    "code": 500,
    "msg": "無效的狀態(tài)標(biāo)志;key的長(zhǎng)度為5-25;名稱不能為空;",
    "content": null
}

二、分組校驗(yàn)

有時(shí)候需要在不同的方法中對(duì)同一個(gè)bean中的參數(shù)進(jìn)行校驗(yàn)

1、在dto中添加groups

@Data
public class DemoDto {
 public interface Default {
 }
 public interface Update {
 }
 @NotEmpty(message = "名稱不能為空")
 private String name;
 @Length(min = 5, max = 25, message = "key的長(zhǎng)度為5-25" ,groups = Default.class )
 private String key;
 @Pattern(regexp = "[012]", message = "無效的狀態(tài)標(biāo)志",groups = {Default.class,Update.class} )
 private String state;
}

2、在controller中需要用到@Validated來校驗(yàn)

@RequestMapping("test2")
 public String test2(@Validated(value = DemoDto.Default.class) @RequestBody DemoDto dto){
 System.out.println("test....................");
 return "test.........................";
 }

 @RequestMapping("test4")
 public String test4(@Validated(value = {DemoDto.Default.class,DemoDto.Update.class}) @RequestBody DemoDto dto){
 System.out.println("test....................");
 return "test.........................";
 }

三、國(guó)際化返回配置文件的信息

1. 在Resource下添加properties文件

文件中添加需要打印的消息,如:

demo.key.null=demo的key不能為空
start.ge.end = 開始日期{0}必須小于結(jié)束日期{1}!
demo.key.length=demo的key長(zhǎng)度不正確

2. 在application.yml中添加配置

spring:
 messages:
 encoding: UTF-8
 basename: message/messages_zh

3. 使用方法

在類中直接注入,即可使用

 @Autowired
 private MessageSource messageSource;

 @RequestMapping("getMessageByKey")
 public ResultBean getMessageByKey(@Valid @RequestBody DemoDto dto){
 String key = dto.getKey();
 String [] param = {"2019-8-8", "2019-9-9"};
 return new ResultBean(messageSource.getMessage(key, param, Locale.CHINA));
 }

測(cè)試調(diào)用和返回結(jié)果,返回的數(shù)據(jù)和預(yù)期相符合

三、國(guó)際化參數(shù)校驗(yàn)

根據(jù)上面的修改

1、bean 中添加標(biāo)簽

標(biāo)簽需要加在屬性上,@NotEmpty標(biāo)簽String的參數(shù)不能為空

@Data
public class DemoDto {

 @NotEmpty(message = "{demo.key.null}")
 @Length(min = 5, max = 25, message = "{demo.key.length}")
 private String key;
}

2、添加上ValidationMessages文件

國(guó)際化配置文件必須放在classpath的根目錄下,即src/java/resources的根目錄下。

國(guó)際化配置文件必須以ValidationMessages開頭,比如ValidationMessages.properties 或者 ValidationMessages_en.properties。

在/resources的根目錄下添加上ValidationMessages.properties文件

demo.key.null=demo的key不能為空,這里是validationMessage
demo.key.length=demo的key長(zhǎng)度不正確

3、返回結(jié)果

{
    "code": 500,
    "msg": "demo的key不能為空,這里是validationMessage;",
    "content": null
}

自定義properties文件

SpringBoot 國(guó)際化驗(yàn)證 @Validated 的 message 國(guó)際化資源文件默認(rèn)必須放在 resources/ValidationMessages.properties 中。

現(xiàn)在我想把資源文件放到 resources/message/messages_zh.properties 中

若要自定義文件位置或名稱則需要重寫WebMvcConfigurerAdapter 的 getValidator 方法,但WebMvcConfigurerAdapter在springboot2中已經(jīng)廢棄了,可以改為使用WebMvcConfigurationSupport

在一的基礎(chǔ)上修改:

@Configuration
public class ValidatorConfiguration extends WebMvcConfigurationSupport {
 @Autowired
 private MessageSource messageSource;

 @Override
 public Validator getValidator() {
  return validator();
 }

 @Bean
 public Validator validator() {
  LocalValidatorFactoryBean validator = new LocalValidatorFactoryBean();
  validator.setValidationMessageSource(messageSource);
  return validator;
 }
}

最后得到結(jié)果為:

{
    "code": 500,
    "msg": "demo的key不能為空ID:{0};",
    "content": null
}

參考文章:

spring boot國(guó)際化——MessageSource的使用

總結(jié)

到此這篇關(guān)于SpringBoot參數(shù)校驗(yàn)與國(guó)際化使用教程的文章就介紹到這了,更多相關(guān)SpringBoot參數(shù)校驗(yàn)與國(guó)際化使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spring IOC和aop的原理及實(shí)例詳解

    Spring IOC和aop的原理及實(shí)例詳解

    這篇文章主要介紹了Spring IOC和aop的原理及實(shí)例詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • SpringBoot集成JWT令牌詳細(xì)說明

    SpringBoot集成JWT令牌詳細(xì)說明

    這篇文章主要介紹了SpringBoot集成JWT令牌詳細(xì)說明,JWT方式校驗(yàn)方式更加簡(jiǎn)單便捷化,無需通過redis緩存,而是直接根據(jù)token取出保存的用戶信息,以及對(duì)token可用性校驗(yàn),單點(diǎn)登錄,驗(yàn)證token更為簡(jiǎn)單,需要的朋友可以參考下
    2023-10-10
  • 詳解Java中的 枚舉與泛型

    詳解Java中的 枚舉與泛型

    這篇文章主要介紹了 詳解Java中的 枚舉與泛型的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • Mybatis實(shí)現(xiàn)關(guān)聯(lián)關(guān)系映射的方法示例

    Mybatis實(shí)現(xiàn)關(guān)聯(lián)關(guān)系映射的方法示例

    本文主要介紹了Mybatis實(shí)現(xiàn)關(guān)聯(lián)關(guān)系映射的方法示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • Java SpringMVC框架開發(fā)之?dāng)?shù)據(jù)導(dǎo)出Excel文件格式實(shí)例詳解

    Java SpringMVC框架開發(fā)之?dāng)?shù)據(jù)導(dǎo)出Excel文件格式實(shí)例詳解

    這篇文章主要介紹了Java基礎(chǔ)開發(fā)之?dāng)?shù)據(jù)導(dǎo)出Excel文件格式實(shí)例詳解,需要的朋友可以參考下
    2020-02-02
  • Java中你真的會(huì)用Constructor構(gòu)造器嗎之看完本篇你就真的會(huì)了

    Java中你真的會(huì)用Constructor構(gòu)造器嗎之看完本篇你就真的會(huì)了

    顯式初始化要求我們?cè)趯懗绦驎r(shí)就確定初始值,這有時(shí)很不方便。我們可以使用構(gòu)造器(constructor)來初始化對(duì)象。構(gòu)造器可以初始化數(shù)據(jù)成員,還可以規(guī)定特定的操作。這些操作會(huì)在創(chuàng)建對(duì)象時(shí)自動(dòng)執(zhí)行。下面文字將對(duì)該內(nèi)容做詳細(xì)介紹,需要的小伙伴請(qǐng)參考
    2021-09-09
  • 關(guān)于SpringCloud中Ribbon的7種負(fù)載均衡策略解析

    關(guān)于SpringCloud中Ribbon的7種負(fù)載均衡策略解析

    這篇文章主要介紹了關(guān)于SpringCloud中Ribbon的7種負(fù)載均衡策略解析,服務(wù)端負(fù)載均衡器的問題是,它提供了更強(qiáng)的流量控制權(quán),但無法滿足不同的消費(fèi)者希望使用不同負(fù)載均衡策略的需求,而使用不同負(fù)載均衡策略的場(chǎng)景確實(shí)是存在的,需要的朋友可以參考下
    2023-07-07
  • Spring中基于xml的AOP的詳細(xì)步驟

    Spring中基于xml的AOP的詳細(xì)步驟

    這篇文章主要介紹了Spring中基于xml的AOP的詳細(xì)步驟,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-06-06
  • 關(guān)于@Configuration的作用說明

    關(guān)于@Configuration的作用說明

    這篇文章主要介紹了關(guān)于@Configuration的作用說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • java基礎(chǔ)之Integer與int類型輸出示例解析

    java基礎(chǔ)之Integer與int類型輸出示例解析

    這篇文章主要為大家介紹了java基礎(chǔ)之Integer與int類型輸出示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06

最新評(píng)論

松阳县| 昌吉市| 万全县| 汝阳县| 凤阳县| 桂东县| 青神县| 贞丰县| 松潘县| 延长县| 泗阳县| 肇东市| 文昌市| 莲花县| 武川县| 特克斯县| 镇沅| 和静县| 陆川县| 广饶县| 定州市| 什邡市| 石棉县| 利辛县| 东乡族自治县| 阳新县| 澄江县| 来凤县| 遵化市| 濉溪县| 五台县| 广安市| 广德县| 舒城县| 邵东县| 新兴县| 晋中市| 邯郸县| 山阴县| 乌恰县| 雅安市|