UP | HOME

几种获取 Spring Framework 控制器中请求参数的方法

Table of Contents

1 请求参数

在 HTTP 请求中往往有多种请求参数,在 Spring Framework 中的请求参数都是放在如下 所示的包中

import org.springframework.web.bind.annotation.*;

下面是处理几种常见请求的控制器的方法:

2 URI 路径请求

GET /orders/121233

上面是请求 orderId=121233 的订单的 RESTFul API。这里的请求参数位于 URL 的路径 上,可以使用如下代码片段获取参数的值

@GetMapping("/orders/{orderId}")
public Order getOrder(@PathVariable long orderId) {

}

3 URI 的请求参数

GET /orders?status=ready

上面是请求所有状态一个就绪的订单,可以使用如下代码片段获取请求参数的值

@GetMapping("/orders")
public List<Order> getOrdersList(
    @RequestParam(value="status", required=false, defaultValue="idle") String orderStatus) {

}

4 GET 的 Query 字符串中的参数

GET /orders?name=new&total=10

上面的 GET 请求中的 Query 字符串为 name=new&total=10 ,可以理解成一系列的键 值对,所以可以使用如下代码来将其转化成 Java 的 Map 对象

@GetMapping("/orders")
public List<Order> getOrdersList(@RequestParam Map<String, Object> params) {

}

使用 @RequestParam 的好处是可以直接在控制器中是 Map,而不需要使用额外转化成 Map 的冗余代码

5 POST 请求体里面的 JSON 参数

POST /orders

#################### body ####################
{
  "name": "new",
  "total": 10
}

上面的 POST 请求中使用了 JSON 字符串作为请求的消息体,可以使用如下的方式来获取 消息体中的参数

@ResponseStatus(HttpStatus.CREATED)
@PostMapping("/orders")
public Order postOrders(@RequestBody Map<String, Object> params) {

}

当定义的 RequestBody 是一个 Map 数据结构后,直接可以将请求体中的 JSON 数据体构 造成 Java 的 params 对象

6 HttpServletRequest 对象

有时候,我们希望直接获取到请求的对象实例,这样就可以调用 request.getRequestURI() 来动态获取请求的相对路径,实现动态响应请求,Spring Framework 提供了一个有效的手段,那就是直接把 HttpServletRequest 对象作为对象传 入请求方法中

import javax.servlet.http.HttpServletRequest;

@RestController
public class ProxyOrderController {
  @GetMapping("/orders/**")
  public Object getOrders(HttpServletRequest request) {

  }
}

7 请求头

获取所有的请求头

import org.springframework.http.HttpHeaders;

@RestController
public class ProxyOrderController {
  @GetMapping("/orders/**")
  public Object getOrders(@RequestHeader HttpHeaders headers) {

  }
}

获取特定的请求头

@RestController
public class ProxyOrderController {
  @GetMapping("/orders/**")
  public Object getOrders(@RequestHeader("User-Agent") String ua) {

  }
}

Last Updated 2020-02-22 Sat 20:06. Created by Jinghui Hu at 2019-11-19 Tue 21:29.