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

SpringBoot常見get/post請(qǐng)求參數(shù)處理、參數(shù)注解校驗(yàn)及參數(shù)自定義注解校驗(yàn)詳解

 更新時(shí)間:2022年03月14日 11:58:39   作者:BraveSoul360  
這篇文章主要給大家介紹了關(guān)于SpringBoot常見get/post請(qǐng)求參數(shù)處理、參數(shù)注解校驗(yàn)及參數(shù)自定義注解校驗(yàn)的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下

spring boot 常見http get ,post請(qǐng)求參數(shù)處理

在定義一個(gè)Rest接口時(shí)通常會(huì)利用GET、POST、PUT、DELETE來實(shí)現(xiàn)數(shù)據(jù)的增刪改查;這幾種方式有的需要傳遞參數(shù),后臺(tái)開發(fā)人員必須對(duì)接收到的參數(shù)進(jìn)行參數(shù)驗(yàn)證來確保程序的健壯性

  • GET
    一般用于查詢數(shù)據(jù),采用明文進(jìn)行傳輸,一般用來獲取一些無關(guān)用戶信息的數(shù)據(jù)
  • POST
    一般用于插入數(shù)據(jù)
  • PUT
    一般用于數(shù)據(jù)更新
  • DELETE
    一般用于數(shù)據(jù)刪除
    一般都是進(jìn)行邏輯刪除(即:僅僅改變記錄的狀態(tài),而并非真正的刪除數(shù)據(jù))

@PathVaribale 獲取url中的數(shù)據(jù)

@RequestParam 獲取請(qǐng)求參數(shù)的值

@GetMapping 組合注解,是 @RequestMapping(method = RequestMethod.GET) 的縮寫

@RequestBody 利用一個(gè)對(duì)象去獲取前端傳過來的數(shù)據(jù)

PathVaribale 獲取url路徑的數(shù)據(jù)

請(qǐng)求URL:

localhost:8080/hello/id 獲取id值

實(shí)現(xiàn)代碼如下:

@RestController
public class HelloController {
    @RequestMapping(value="/hello/{id}/{name}",method= RequestMethod.GET)
    public String sayHello(@PathVariable("id") Integer id,@PathVariable("name") String name){
        return "id:"+id+" name:"+name;
    }
}

在瀏覽器中 輸入地址:

localhost:8080/hello/100/hello

輸出:

id:81name:hello

RequestParam 獲取請(qǐng)求參數(shù)的值

獲取url參數(shù)值,默認(rèn)方式,需要方法參數(shù)名稱和url參數(shù)保持一致

localhost:8080/hello?id=1000

@RestController
public class HelloController {
    @RequestMapping(value="/hello",method= RequestMethod.GET)
    public String sayHello(@RequestParam Integer id){
        return "id:"+id;
    }
}

輸出:

id:100

url中有多個(gè)參數(shù)時(shí),如:

localhost:8080/hello?id=98&&name=helloworld

具體代碼如下:

@RestController
public class HelloController {
    @RequestMapping(value="/hello",method= RequestMethod.GET)
    public String sayHello(@RequestParam Integer id,@RequestParam String name){
        return "id:"+id+ " name:"+name;
    }
}

獲取url參數(shù)值,執(zhí)行參數(shù)名稱方式

localhost:8080/hello?userId=1000

@RestController
public class HelloController {
    @RequestMapping(value="/hello",method= RequestMethod.GET)
    public String sayHello(@RequestParam("userId") Integer id){
        return "id:"+id;
    }
}

輸出:

id:100

注意

不輸入id的具體值,此時(shí)返回的結(jié)果為null。具體測(cè)試結(jié)果如下:

id:null

不輸入id參數(shù),則會(huì)報(bào)如下錯(cuò)誤:

whitelable Error Page錯(cuò)誤

GET參數(shù)校驗(yàn)

用法:不輸入id時(shí),使用默認(rèn)值

具體代碼如下:

localhost:8080/hello

@RestController
public class HelloController {
    @RequestMapping(value="/hello",method= RequestMethod.GET)
    //required=false 表示url中可以無id參數(shù),此時(shí)就使用默認(rèn)參數(shù)
    public String sayHello(@RequestParam(value="id",required = false,defaultValue = "1") Integer id){
        return "id:"+id;
    }
}

輸出

id:1

POST JSON參數(shù)校驗(yàn)

常用校驗(yàn)注解

注意:

接收到的參數(shù)默認(rèn)都是字符串類型的

有的注解只能用在String類型的屬性上

@JsonProperty可以實(shí)現(xiàn)前端的屬性名和后臺(tái)實(shí)體類的屬性名不一致問題

校驗(yàn)方式:

使用@RequestBody @Valid 對(duì)JSON參數(shù)進(jìn)行獲取和校驗(yàn)。

通過BindingResult bindingResult 去獲取校驗(yàn)結(jié)果。

BindingResult 源碼:

技巧01:利用BindingResult對(duì)象的hasErrors方法判斷是否有參數(shù)錯(cuò)誤

技巧02:利用BindingResult對(duì)象的getFieldErrors方法獲取所有有參數(shù)錯(cuò)誤的屬性

技巧03:利用錯(cuò)誤屬性對(duì)象的getDefaultMessage去獲取錯(cuò)誤提示信息

@RequestMapping(value = "/demo5",produces = MediaType.TEXT_PLAIN_VALUE)
    @ResponseBody
    public String test5(@RequestBody @Valid  User user , BindingResult bindingResult){
        if(bindingResult.hasErrors()){
            List<ObjectError> objectErrors = bindingResult.getAllErrors();
            System.out.println(objectErrors.toString());
            for(ObjectError objectError: objectErrors){
                System.out.println("objectError = " + objectError.getObjectName());
                System.out.println("objectError = " + objectError.getDefaultMessage());
                System.out.println("objectError = " + objectError.getCode());
                System.out.println("objectError = " + objectError.getArguments());

            }
        }
        String str =  user.toString();

        return str;
    }

對(duì)應(yīng)User實(shí)體類代碼:

public class User {
    @NotEmpty(message = "ID不能為空")
    @NotBlank(message = "ID不能為空喲")
    private String id;

    @Min(value = 18)
    @Max(value = 30)
    private Integer age;

    @NotEmpty(message = "昵稱不能為空")
    @NotBlank(message = "昵稱不能為空喲")
    @JsonProperty("nickname") //  當(dāng)前端屬性為nick后臺(tái)接收對(duì)象的屬性為nickName時(shí)可以用@JsonProperty來保持一致
    private String name;

    ....省略get set方法

自定義注解校驗(yàn)

1、定義一個(gè)校驗(yàn)注解

代碼如下:

import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.*;

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.PARAMETER, ElementType.FIELD})
@Constraint(validatedBy = MyFormValidatorClass.class)
public @interface MyFormValidator {
    String value();
    String message() default "name can be test";
    Class<?>[] groups() default {};
    Class<? extends Payload>[]  payload() default {};
}

2、定義一個(gè)約束校驗(yàn)

import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import java.lang.annotation.Annotation;

public class MyFormValidatorClass implements ConstraintValidator<MyFormValidator, Object>, Annotation {
    private String values;

    @Override
    public void initialize(MyFormValidator myFormValidator) {
        this.values = myFormValidator.value();
    }

    @Override
    public boolean isValid(Object value, ConstraintValidatorContext context) {
        if("test".equals((String)value)){
            return true;
        }
        return false;
    }

    @Override
    public Class<? extends Annotation> annotationType() {
        return null;
    }
}

3、實(shí)體類中使用

public class User2 {
    @NotEmpty(message = "ID不能為空")
    @NotBlank(message = "ID不能為空喲")
    //自定義校驗(yàn)注解-校驗(yàn)id是否為test
    @MyFormValidator(value = "abc",message = "dd")
    private String id;

    @Min(value = 18)
    @Max(value = 30)
    private Integer age;

    @NotEmpty(message = "昵稱不能為空")
    @NotBlank(message = "昵稱不能為空喲")
    @JsonProperty("nickname") //  當(dāng)前端屬性為nick后臺(tái)接收對(duì)象的屬性為nickName時(shí)可以用@JsonProperty來保持一致

4、測(cè)試代碼:

@RequestMapping(value = "/demo6",produces = MediaType.TEXT_PLAIN_VALUE)
    @ResponseBody
    public String test6(@RequestBody @Valid User2 user , BindingResult bindingResult){
        if(bindingResult.hasErrors()){
            List<ObjectError> objectErrors = bindingResult.getAllErrors();
            System.out.println(objectErrors.toString());
            for(ObjectError objectError: objectErrors){
                System.out.println("objectError = " + objectError.getObjectName());
                System.out.println("objectError = " + objectError.getDefaultMessage());
                System.out.println("objectError = " + objectError.getCode());
                System.out.println("objectError = " + objectError.getArguments());

            }
        }
        String str =  user.toString();

        return str;
    }

當(dāng)請(qǐng)求參數(shù)ID不為test,objectErrors 中有該報(bào)錯(cuò)。

 總結(jié)

到此這篇關(guān)于SpringBoot常見get/post請(qǐng)求參數(shù)處理、參數(shù)注解校驗(yàn)及參數(shù)自定義注解校驗(yàn)詳解的文章就介紹到這了,更多相關(guān)springboot常見http get post請(qǐng)求參數(shù)處理內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 關(guān)于Spring事務(wù)隔離、傳播屬性與@Transactional注解

    關(guān)于Spring事務(wù)隔離、傳播屬性與@Transactional注解

    這篇文章主要介紹了關(guān)于事務(wù)隔離、Spring傳播屬性與@Transactional注解,如果一組處理步驟或者全部發(fā)生或者一步也不執(zhí)行,我們稱該組處理步驟為一個(gè)事務(wù),需要的朋友可以參考下
    2023-05-05
  • Spring MVC-@RequestMapping注解詳解

    Spring MVC-@RequestMapping注解詳解

    @RequestMapping注解的作用,就是將請(qǐng)求和處理請(qǐng)求的控制器方法關(guān)聯(lián)起來,建立映射關(guān)系。這篇文章主要給大家介紹了關(guān)于SpringMVC中@RequestMapping注解用法,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-04-04
  • java對(duì)數(shù)組進(jìn)行排序的方法

    java對(duì)數(shù)組進(jìn)行排序的方法

    這篇文章主要介紹了java對(duì)數(shù)組進(jìn)行排序的方法,涉及java數(shù)組排序的技巧,需要的朋友可以參考下
    2015-03-03
  • Spring?Boot?+?Canal?實(shí)現(xiàn)數(shù)據(jù)庫(kù)實(shí)時(shí)監(jiān)控

    Spring?Boot?+?Canal?實(shí)現(xiàn)數(shù)據(jù)庫(kù)實(shí)時(shí)監(jiān)控

    這篇文章主要介紹了Spring?Boot?+?Canal實(shí)現(xiàn)數(shù)據(jù)庫(kù)實(shí)時(shí)監(jiān)控,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-08-08
  • MyBatis-Plus更新對(duì)象時(shí)將字段值更新為null的四種常見方法

    MyBatis-Plus更新對(duì)象時(shí)將字段值更新為null的四種常見方法

    MyBatis-Plus 是一個(gè) MyBatis 的增強(qiáng)工具,在簡(jiǎn)化開發(fā)、提高效率方面表現(xiàn)非常出色,而,在使用 MyBatis-Plus 更新對(duì)象時(shí),默認(rèn)情況下是不會(huì)將字段值更新為 null 的,如果你需要將某些字段的值更新為 null,有幾種方法可以實(shí)現(xiàn),本文將介紹幾種常見的方法
    2024-11-11
  • java實(shí)現(xiàn)翻轉(zhuǎn)單詞順序列

    java實(shí)現(xiàn)翻轉(zhuǎn)單詞順序列

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)翻轉(zhuǎn)單詞順序列,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-03-03
  • 淺談SpringSecurity重寫默認(rèn)配置

    淺談SpringSecurity重寫默認(rèn)配置

    這篇文章主要介紹了SpringSecurity重寫默認(rèn)配置,包括注入Bean、擴(kuò)展WebSecurityConfigurerAdapter、重寫端點(diǎn)授權(quán)配置及實(shí)現(xiàn)AuthenticationProvider,感興趣的可以了解一下
    2025-01-01
  • 如何在java 8 stream表達(dá)式實(shí)現(xiàn)if/else邏輯

    如何在java 8 stream表達(dá)式實(shí)現(xiàn)if/else邏輯

    這篇文章主要介紹了如何在java 8 stream表達(dá)式實(shí)現(xiàn)if/else邏輯,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • Java中Console對(duì)象實(shí)例代碼

    Java中Console對(duì)象實(shí)例代碼

    這篇文章主要介紹了Java中Console對(duì)象實(shí)例代碼,分享了相關(guān)代碼示例,小編覺得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-02-02
  • java實(shí)現(xiàn)自動(dòng)回復(fù)聊天機(jī)器人

    java實(shí)現(xiàn)自動(dòng)回復(fù)聊天機(jī)器人

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)自動(dòng)回復(fù)聊天機(jī)器人,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-08-08

最新評(píng)論

西充县| 湛江市| 唐山市| 镇坪县| 武夷山市| 合水县| 车险| 乐昌市| 隆昌县| 桐庐县| 娱乐| 鸡西市| 修水县| 会东县| 大连市| 文登市| 富蕴县| 西城区| 任丘市| 鄂尔多斯市| 辉南县| 绥滨县| 大庆市| 马鞍山市| 东莞市| 海淀区| 天峻县| 息烽县| 西平县| 通州区| 荥经县| 绍兴县| 深水埗区| 都匀市| 东平县| 藁城市| 石城县| 南郑县| 锡林郭勒盟| 新河县| 泰州市|