springBoot中的所有请求类型

  1. @RequestParam:请求参数在URL中用于处理Content-Type为application/x-www-form-urlencoded编码的内容,只能接受简单类型的参数,例如:http://localhost:8080/user?id=1&name=Tom。
  2. @RequestBody:请求参数在请求体中,包含JSON、XML等类型的数据,例如:{“id”:1,“name”:“Tom”}。
  3. @PathVariable:请求参数在URL路径中,例如:http://localhost:8080/user/1。
  4. @RequestHeader:请求参数在请求头中,例如:Content-Type: application/json。
  5. @CookieValue:请求参数在Cookie中,例如:JSESSIONID=123456789。

这些请求类型在使用上都可以在一个请求函数里面同时使用

@PostMapping("/user/{id}")
public String updateUser(@PathVariable Long id,
                          @RequestParam String name,
                          @RequestBody User user,
                          @RequestHeader("Content-Type") String contentType,
                          @CookieValue("JSESSIONID") String sessionId) {
    // ...
}

在这个例子中,我们使用@PostMapping注解来指定请求的HTTP方法为POST,并指定请求的URL路径为/user/{id}。我们还使用@PathVariable注解来获取URL路径中的参数id,使用@RequestParam注解来获取URL中的参数name,使用@RequestBody注解来获取请求体中的参数user,使用@RequestHeader注解来获取Content-Type请求头的值,使用@CookieValue注解来获取Cookie中的JSESSIONID参数的值。

关于@PathVariable和@RequestParam的区别

当你使用@RequestParam注解时,你可以从请求URL中获取参数。请求URL是HTTP请求中的一部分,包含了一些参数,例如http://localhost:8080/user?id=1&name=Tom。在Spring Boot中,你可以使用@RequestParam注解来获取这些参数。

例如,如果你想要获取URL中的参数name的值,你可以这样写:

@GetMapping("/user")
public String getUser(@RequestParam String name) {
    // ...
}

在这个例子中,我们使用@GetMapping注解来指定请求的URL路径为/user。我们还使用@RequestParam注解来指定要获取的URL参数名为name,并将其值赋给name变量。

在这个例子中,如果你的请求地址是http://localhost:8080/user?id=1&name=Tom,那么各个参数获取的值如下:

  • id:1
  • name:Tom
  • user:请求体中的JSON字符串转换成的User对象
  • contentType:Content-Type请求头的值
  • sessionId:JSESSIONID Cookie的值

在这个例子中,如果你的请求地址是http://localhost:8080/user/1,那么各个参数获取的值如下:

  • id:1
  • name:null
  • user:请求体中的JSON字符串转换成的User对象
  • contentType:Content-Type请求头的值
  • sessionId:JSESSIONID Cookie的值

当URL中的参数名和方法参数名不一致时,你可以使用@RequestParam注解来指定URL参数名。例如:

@PostMapping("/user")
public String updateUser(@RequestParam("user_id") Long id) {
    // ...
}

在这个例子中,我们使用@PostMapping注解来指定请求的URL路径为/user。我们还使用@RequestParam注解来指定要获取的URL参数名为user_id,并将其值赋给id变量。

如果你想要使用路径/user/{id},你可以这样写:

@PostMapping("/user/{user_id}")
public String updateUser(@PathVariable("user_id") Long id) {
    // ...
}

在这个例子中,我们使用@PostMapping注解来指定请求的URL路径为/user/{user_id}。我们还使用@PathVariable注解来指定要获取的URL路径参数名为user_id,并将其值赋给id变量。

因此,当URL中的参数名和方法参数名不一致时,你只能使用@RequestParam注解来获取URL中的参数。

@RequestBody的注意事项

如果后端参数是一个对象,且该参数前是以@RequestBody修饰的,那么前端传递json参数时,必须满足以下要求:

后端@RequestBody注解对应的类在将HTTP的输入流(含请求体)装配到目标类(即:@RequestBody后面的类)时,会根据json字符串中的key来匹配对应实体类的属性,如果匹配一致且json中的该key对应的值符合(或可转换为),这一条我会在下面详细分析,其他的都可简单略过,但是本文末的核心逻辑代码以及几个结论一定要看! 实体类的对应属性的类型要求时,会调用实体类的setter方法将值赋给该属性。

json字符串中,如果value为""的话,后端对应属性如果是String类型的,那么接受到的就是"",如果是后端属性的类型是Integer、Double等类型,那么接收到的就是null。

json字符串中,如果value为null的话,后端对应收到的就是null。

如果某个参数没有value的话,在传json字符串给后端时,要么干脆就不把该字段写到json字符串中;要么写value时, 必须有值,null  或""都行。千万不能有类似"stature":,这样的写法,如:

常见的Http方法

1. PUT:用于更新或创建资源,请求的主体包含完整的要更新的资源。

2. DELETE:用于删除资源。

3. PATCH:用于部分更新资源,请求的主体包含要应用的更新。

4. HEAD:与GET方法类似,但只返回响应头,不返回响应体。

5. OPTIONS:用于获取目标资源支持的通信选项。

6. TRACE:用于追踪请求在服务器端的传输路径。

7. CONNECT:用于通过代理连接目标主机,通常用于建立加密隧道。

HTTP方法的选择取决于我们要对资源执行的操作。GET用于获取资源,POST用于创建资源,PUT和PATCH用于更新资源,DELETE用于删除资源,HEAD用于获取响应头等。在RESTful API设计中,正确选择和使用HTTP方法可以使API具有更好的可读性、可维护性和可扩展性。

这些HTTP方法的参数可以存放在不同的地方,具体取决于请求的类型和目标:

1. GET方法的参数通常是通过URL的查询字符串(Query String)传递的,即将参数附加在URL的末尾,以`?`开头,并使用`&`符号分隔不同的参数。例如:`http://example.com/api?param1=value1&param2=value2`。

2. POST方法的参数通常是通过请求体(Request Body)传递的。请求体是请求的一部分,用于向服务器发送数据,可以是表单数据、JSON数据等。参数的格式可以是`application/x-www-form-urlencoded`(默认)或`multipart/form-data`(用于上传文件)。

3. PUT和DELETE方法的参数通常也是通过请求体传递的,格式与POST方法类似。

4. PATCH方法的参数可以通过URL的查询字符串或请求体传递,具体取决于API的设计。

需要注意的是,不同的框架和库可能对参数的处理方式有所不同。在某些情况下,参数也可以通过请求的头部(Headers)或路径(Path)传递。因此,具体的参数位置可以通过查看API文档或网络请求的具体实现来确定。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Spring Boot封装HTTP请求可以使用RestTemplate或者Feign来实现。下面分别介绍这两种方式的使用: 1. 使用RestTemplate: RestTemplate是Spring提供的一个HTTP客户端工具,可以发送HTTP请求并处理响应。以下是一个简单的封装示例: ```java import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpMethod; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.util.MultiValueMap; import org.springframework.web.client.RestTemplate; public class HttpUtils { private static final RestTemplate restTemplate = new RestTemplate(); public static <T> T sendGetRequest(String url, Class<T> responseType) { HttpHeaders headers = new HttpHeaders(); headers.set(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON_VALUE); HttpEntity<MultiValueMap<String, String>> entity = new HttpEntity<>(headers); ResponseEntity<T> responseEntity = restTemplate.exchange(url, HttpMethod.GET, entity, responseType); return responseEntity.getBody(); } public static <T> T sendPostRequest(String url, Object request, Class<T> responseType) { HttpHeaders headers = new HttpHeaders(); headers.set(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON_VALUE); headers.set(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE); HttpEntity<Object> entity = new HttpEntity<>(request, headers); ResponseEntity<T> responseEntity = restTemplate.exchange(url, HttpMethod.POST, entity, responseType); return responseEntity.getBody(); } } ``` 上述代码,我们定义了一个HttpUtils类,提供了sendGetRequest和sendPostRequest两个方法,分别用于发送GET和POST请求,并且可以指定返回结果的类型。 2. 使用Feign: Feign是一个声明式的Web服务客户端,可以通过注解方式定义和实现HTTP请求。以下是一个简单的封装示例: 1)首先,在Spring Boot的启动类上添加@EnableFeignClients注解: ```java import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.openfeign.EnableFeignClients; @SpringBootApplication @EnableFeignClients public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } ``` 2)然后,创建一个Feign客户端接口: ```java import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; @FeignClient(name = "example", url = "http://example.com") public interface HttpClient { @GetMapping("/api/get") String get(); @PostMapping("/api/post") String post(@RequestBody Object request); } ``` 在上述代码,我们使用@FeignClient注解指定了服务名和请求URL。 3)最后,在需要使用HTTP请求的地方注入HttpClient接口并调用相应的方法: ```java import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service public class MyService { private final HttpClient httpClient; @Autowired public MyService(HttpClient httpClient) { this.httpClient = httpClient; } public String doHttpRequest() { String response = httpClient.get(); // 处理响应 return response; } } ``` 在上述代码,我们通过@Autowired注解将HttpClient接口注入到MyService,并调用需要的方法来发送HTTP请求。 以上是在Spring Boot封装HTTP请求的两种常用方式,你可以根据具体需求选择使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值