springboot 获取前端json数据几种方法

java 同时被 2 个专栏收录
6 篇文章 0 订阅
6 篇文章 0 订阅

基本概念

  1. JQuery Ajax 以 application/x-www-form-urlencoded 上传 JSON对象 ,

后端用 @RequestParam 或者Servlet 获取参数。

  1. JQuery Ajax 以 application/json 上传 JSON字符串,

后端用 @RquestBody 获取参数,或者@RequestParam获取。

几个注释

@PathVariable:

一般我们使用URI template样式映射时用,即url/{key}这种形式,也就是一般我们使用的GET,DELETE,PUT方法会使用到的,我们可以获取URL后所跟的参数。

@RequestParam:

一般我们使用该注解来获取多个参数,在注解后括号内写入需要获取参数的参数名即可,一般在PUT,POST中比较常用。注意后端想用这个方法,前端必须x-www-form-urlencoded,而不能加contentType: ‘application/json;charset=UTF-8’,

@RequestBody:

该注解和@RequestParam殊途同归,我们使用该注解将所有参数转换,在代码部分在一个个取出来,也是目前我使用到最多的注解来获取参数。它是用来处理前台定义发来的数据Content-Type: 而不是application/x-www-form-urlencoded编码的内容。例如application/json, application/xml等;使用@RequestBody注解接收参数的时候,从名称上来看也就是说要读取的数据在请求体里,前台的Content-Type必须要改为application/json,所以要发post请求,因为Ajax使用的POST,并且发送的是JSON对象。前端必须指定请求json数据的contentType为:application/json,否则会报类型不支持的异常错误“org.springframework.web.HttpMediaTypeNotSupportedException”

@RequestHeader

获取头信息里的值

@CookieValue

获取Cookie值

示例

参数来自路径

1.get请求,url路径传参

http://localhost:4001/api/unit?code=111

后端要获取code参数,可以使用@RequestParam注解

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

2.get请求,url路径参数

http://localhost:4001/api/unit/1

后端使用@PathVariable可以接收路径参数1。

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

一般参数来自路径的,为get请求时,使用@PathVariable或者@RequestParam获取参数值,获取路径参数。
@PathVariable一般用于获取获取url/{key}
@RequestParam获取查询参数。即url?name=XX

参数来自请求体Body

一般是post请求,后端接受方式为用map接收,或者实体对象接收

//map接收
@PostMapping(path = "/demo1")
public void demo1(@RequestBody Map<String, String> person) {
    System.out.println(person.get("name"));
}
 
//或者是实体对象接收
@PostMapping(path = "/demo1")
public void demo1(@RequestBody Person person) {
    System.out.println(person.toString());
}
 
 //或者直接集合的方式,这样前端传的是列表
@PostMapping("/getJson")
@ResponseBody
public List<User> getJsonVal(@RequestBody List<Person> person) throws IOException {
    for(User person1: person){
        System.out.println("person1= " + person1);
    }
    return user;
}

参考链接:

https://blog.csdn.net/qq_20957669/article/details/89227840.

https://my.oschina.net/u/4057956/blog/3052388.

  • 5
    点赞
  • 2
    评论
  • 8
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

评论 2 您还未登录,请先 登录 后发表或查看评论
©️2022 CSDN 皮肤主题:1024 设计师:我叫白小胖 返回首页

打赏作者

Liang-z-x

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值