Springboot中接口接收不同的请求数据类型,接口应该如何正确配置

公司刚来的java自从接手了项目之后,跟前端同学对接口总能吵起来。总是很自信说前端同学传的参数不对,说肯定是前端的问题,自己测试都没问题能收到数据。结果我一看,前端传个json,后端却没有在参数上添加@Responsebody注解,瞬间无语。不过其实这也没什么,毕竟一个系统的前端和后端请求的参数类型都是统一的,直接看之前的代码然后CV一套带走就好。可是谁让咱的系统烂呢!什么类型都有,传什么参数类型全看一个心情。

按请求的类型一般可以分为GETPOST请求,前者的发送的请求内容类型(Content-Type)一般是K=Vform-data形式,后者一般是form-datajson的形式。下面分别演示一下。

GET
  • K=V请求方式
    创建一个简单的controller示例,添加一个Get请求接口/sendKV

     

    java

    代码解读

    复制代码

    @RestController public class TestController { @GetMapping("/sendKV") public String sendKV(@RequestParam("name") String name,@RequestParam("age") Integer age){ return name+","+age; } }

    使用PostMan测试接口,看是否能够成功接收并返回请求的数据。

     由此可见,K=V的请求方式需要将指定的参数定义到方法的形参中,并通过@RequestParam()注解指定要接收的参数名

  • form-data请求方式
    这次先不创建新的接口,后端继续使用上个示例定义的/sendKV接口,直接使用PostMan进行测试

     成功接收并返回了请求数据,说明这种形式的接口既能接收KV形式的参数,也能接收form-data的请求参数

    整理了一份Java面试题。包括了:Java面试、Spring、JVM、MyBatis、Redis、MySQL、并发编程、微服务、Linux、Springboot、SpringCloud、MQ、Kafka 面试专题

     需要全套面试笔记的【点击此处】即可免费获取

  • 路径传参的请求的方式
    还有一种请求参数的方式是在请求的url路径上传递参数

     上面的请求直接将请求参数以路径的形式拼接到接口名后面,这种请求方式的接口定义如下:

     

    java

    代码解读

    复制代码

    @GetMapping("/sendPath/{name}/{age}") public String sendPath(@PathVariable("name") String name, @PathVariable("age") Integer age){ return name+","+age; }

    在定义接口名的时候,将路径中的参数名用{}包裹,并且在定义的参数中使用@PathVariable()对应参数的名称。

    以上就是GET的常用请求参数类型,以及如何针对这些不同的报文类型去定义接口。

POST
  • form-data请求方式
    创建接口/sendFormData

     

    java

    代码解读

    复制代码

    @PostMapping("/sendFormData") public String sendFormData(@RequestParam("name") String name,@RequestParam("age") Integer age){ return name+","+age; }

    接口的创建方式和Get请求针对参数类型的处理方式是相同的,都是通过@RequestParam()注解来接收参数,只不过将接口设置为了PostMapping。测试一下:

     请求成功,没有问题。

  • json请求方式
    这次依然先不创建新的接口,后端继续使用上个示例定义的/sendFormData接口,直接使用PostMan进行测试

     发现请求返回的状态是400,这个状态表示客户端发送的请求数据格式,服务器无法处理。同样的后台也打印出一条异常:Required request parameter 'name' for method parameter type String is not present,意思就是说请求参数name不存在。这就说明,上面的接口定义方式是注定无法处理json请求的。
    现在重新添加一个可以处理json请求的接口/sendJson

     

    java

    代码解读

    复制代码

    @PostMapping("/sendJson") public String sendJson(@RequestBody User user){ return user.getName()+","+user.getAge(); }

    在日常的开发中,一般使用一个实体类去映射接收到的json数据,实体类中定义了json中包含的字段对应的相同名称的属性。就像下面这样:

     

    java

    代码解读

    复制代码

    public class User { private String name; private Integer age; public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } }

    接口请求测试:

     接口成功处理了请求过来的json数据,并将数据映射到实体类中。

    接口也可以直接使用字符串接收请求的json,然后在对json字符串进行解析json的解析本文不做介绍,接收json字符串接口/sendJsonStr示例:

     

    java

    代码解读

    复制代码

    @PostMapping("/sendJsonStr") public String sendJsonStr(@RequestBody String user){ return user; }

    请求测试:

     可以看到,接口成功使用字符串类型接收了json数据,并成功返回了json字符串

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot接收别人写的接口发送的JSON数据,您可以使用`@RequestBody`注解将接收到的JSON数据绑定到一个Java对象上。以下是一个示例代码,展示了如何在Spring Boot接收JSON数据: ```java import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; @RestController public class YourController { @PostMapping("/your_endpoint") public String handleJson(@RequestBody YourModel yourModel) { // 在这里对接收到的JSON数据进行解析和处理 // 示例:获取JSON数据的某个字段值 String fieldValue = yourModel.getFieldName(); // 在这里编写你的逻辑代码,处理接收到的JSON数据 // 返回响应 return "Success"; } } ``` 在上述代码,我们使用`@PostMapping`注解来定义一个POST请求接口`/your_endpoint`。`@RequestBody`注解用于将接收到的JSON数据绑定到`YourModel`对象上。 您需要自己定义`YourModel`类,用于描述JSON数据的结构。例如,如果JSON数据包含一个名为`fieldName`的字段,您可以在`YourModel`类添加一个对应的属性和相应的getter和setter方法。 在`handleJson()`方法,您可以对接收到的JSON数据进行解析和处理。例如,您可以使用`yourModel.getFieldName()`来获取JSON数据的某个字段值。 最后,您可以根据需要编写逻辑代码来处理接收到的JSON数据,并根据处理结果返回相应的响应。 请注意,以上只是一个简单的示例,您可能需要根据自己的需求进行修改和扩展。另外,确保在Spring Boot应用程序引入了相应的依赖(如`spring-boot-starter-web`),并且已正确配置了服务器和端口等相关信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值