中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

SpringBoot常見get/post請求參數處理的方法

發布時間:2022-03-14 13:36:13 來源:億速云 閱讀:2121 作者:iii 欄目:開發技術

這篇文章主要介紹了SpringBoot常見get/post請求參數處理的方法的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇SpringBoot常見get/post請求參數處理的方法文章都會有所收獲,下面我們一起來看看吧。

    spring boot 常見http get ,post請求參數處理

    在定義一個Rest接口時通常會利用GET、POST、PUT、DELETE來實現數據的增刪改查;這幾種方式有的需要傳遞參數,后臺開發人員必須對接收到的參數進行參數驗證來確保程序的健壯性

    • GET
      一般用于查詢數據,采用明文進行傳輸,一般用來獲取一些無關用戶信息的數據

    • POST
      一般用于插入數據

    • PUT
      一般用于數據更新

    • DELETE
      一般用于數據刪除
      一般都是進行邏輯刪除(即:僅僅改變記錄的狀態,而并非真正的刪除數據)

    @PathVaribale 獲取url中的數據

    @RequestParam 獲取請求參數的值

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

    @RequestBody 利用一個對象去獲取前端傳過來的數據

    PathVaribale 獲取url路徑的數據

    請求URL:

    localhost:8080/hello/id 獲取id值

    實現代碼如下:

    @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 獲取請求參數的值

    獲取url參數值,默認方式,需要方法參數名稱和url參數保持一致

    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中有多個參數時,如:

    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參數值,執行參數名稱方式

    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的具體值,此時返回的結果為null。具體測試結果如下:

    id:null

    不輸入id參數,則會報如下錯誤:

    whitelable Error Page錯誤

    GET參數校驗

    用法:不輸入id時,使用默認值

    具體代碼如下:

    localhost:8080/hello

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

    輸出

    id:1

    POST JSON參數校驗

    常用校驗注解

    SpringBoot常見get/post請求參數處理的方法

    注意:

    接收到的參數默認都是字符串類型的

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

    @JsonProperty可以實現前端的屬性名和后臺實體類的屬性名不一致問題

    校驗方式:

    使用@RequestBody @Valid 對JSON參數進行獲取和校驗。

    通過BindingResult bindingResult 去獲取校驗結果。

    BindingResult 源碼:

    SpringBoot常見get/post請求參數處理的方法

    技巧01:利用BindingResult對象的hasErrors方法判斷是否有參數錯誤

    技巧02:利用BindingResult對象的getFieldErrors方法獲取所有有參數錯誤的屬性

    技巧03:利用錯誤屬性對象的getDefaultMessage去獲取錯誤提示信息

    @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;
        }

    對應User實體類代碼:

    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") //  當前端屬性為nick后臺接收對象的屬性為nickName時可以用@JsonProperty來保持一致
        private String name;
    
        ....省略get set方法

    自定義注解校驗

    1、定義一個校驗注解

    代碼如下:

    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、定義一個約束校驗

    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、實體類中使用

    public class User2 {
        @NotEmpty(message = "ID不能為空")
        @NotBlank(message = "ID不能為空喲")
        //自定義校驗注解-校驗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") //  當前端屬性為nick后臺接收對象的屬性為nickName時可以用@JsonProperty來保持一致

    4、測試代碼:

    @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;
        }

    當請求參數ID不為test,objectErrors 中有該報錯。

    關于“SpringBoot常見get/post請求參數處理的方法”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“SpringBoot常見get/post請求參數處理的方法”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    南澳县| 恩平市| 长宁区| 枣庄市| 东辽县| 塘沽区| 中西区| 宁武县| 师宗县| 武强县| 西乡县| 法库县| 嘉义市| 西乌珠穆沁旗| 惠州市| 千阳县| 前郭尔| 崇义县| 扶沟县| 沾化县| 株洲县| 三明市| 伊春市| 横峰县| 苏尼特右旗| 简阳市| 栖霞市| 宁国市| 高邮市| 富源县| 高密市| 常熟市| 临城县| 崇州市| 仙游县| 灌阳县| 阿勒泰市| 饶平县| 青河县| 韶山市| 江安县|