【转载】Springboot2.x接收参数的多种方式

发布时间 2023-12-12 13:36:01作者: 夏秋初

参考

环境

环境 版本 操作
windows 10
JDK 11
Springboot 2.3.12.RELEASE

正文


package com.example.demo.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import lombok.Data;

import org.springframework.util.MultiValueMap;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;


@RestController
@RequestMapping("/")
public class IndexController {

    /**
     * 路径参数 url/{id}
     * @param id
     * @return
     */
    @GetMapping("path/{id}")
    public Integer path(@PathVariable(name = "id") Integer id) {
        return id;
    }

    /**
     * 查询参数 url?name=
     * @param name
     * @return
     */
    @GetMapping("query")
    public String query(@RequestParam(name = "name") String name){
        return name;
    }

    /**
     * Body参数 请求内容为 json {"name":"张三"},此处如果使用对象类型接收,则自动转换为对象,通过get、set进行获取请求参数。
     * @param body
     * @return
     */
    @PostMapping("body_json")
    public String bodyJson(@RequestBody RequestJson body){
        return body.getName();
    }

    /**
     * Body参数 请求内容为字符串 "hello world",此处应用场景为当参数加密作为字符串放到body中的时候,可以通过`@RequestBody String body`获取body内的所有内容
     * @param body
     * @return
     */
    @PostMapping("body_string")
    public String bodyString(@RequestBody String body){
        return body;
    }

    /**
     * FormData参数 逐个参数接收
     * @param name
     * @return
     */
    @PostMapping("form_data1")
    public String formData1(@RequestParam String name){
        return name;
    }

    /**
     * FormData参数 对象接收
     * @param name
     * @return
     */
    @PostMapping("form_data2")
    public String formData2(RequestJson body){
        return body.getName();
    }

    /**
     * FormData参数 数组接收
     * @param name
     * @return
     */
    @PostMapping("form_data3")
    public String formData3(@RequestParam(name = "name[0][1]") String name){
        return name;
    }

    /**
     * FormData参数 单文件上传
     * @param name
     * @return
     */
    @PostMapping("form_data4")
    public String formData4( @RequestParam("file") MultipartFile file, RequestData requestData){
        System.out.println("文件大小:"+file.getSize());
        return requestData.getName();
    }

    /**
     * FormData参数 多文件上传
     * @param name
     * @return
     */
    @PostMapping("form_data5")
    public String formData5( @RequestParam("files") MultipartFile[] files, RequestData requestData){
        System.out.println("文件大小:"+files.length);
        return requestData.getName();
    }

    /**
     * x-www-from-urlencode参数 单参数接收
     * @param name
     * @return
     */
    @PostMapping("x_www_from_url_encode1")
    public String xWWWFromUrlEncode1(@RequestParam String name){
        return name;
    }

    /**
     * x-www-from-urlencode参数 Map接收
     * @param name
     * @return
     */
    @PostMapping("x_www_from_url_encode2")
    public String xWWWFromUrlEncode2(@RequestBody MultiValueMap<String, String> values){
        return values.get("name").toString();
    }

    
    
    
}

/**
 * 请求 body json实体
 */
@Data
class RequestJson {
    private String name;    
}


/**
 * 请求参数对象
 */
@Data
class RequestData {
    private String name;    
}