我正在使用 Spring Boot 开发一个项目。我有一个接受 GET 请求的控制器。
目前我接受对以下类型 URL 的请求:
但我想使用 查询参数接受请求:
这是我的控制器的代码:
@RequestMapping(value="/data/{itemid}", method = RequestMethod.GET)
public @ResponseBody
item getitem(@PathVariable("itemid") String itemid) {
item i = itemDao.findOne(itemid);
String itemname = i.getItemname();
String price = i.getPrice();
return i;
}
使用@RequestParam
@RequestMapping(value="user", method = RequestMethod.GET)
public @ResponseBody Item getItem(@RequestParam("data") String itemid){
Item i = itemDao.findOne(itemid);
String itemName = i.getItemName();
String price = i.getPrice();
return i;
}
虽然 afraisse 接受的答案在使用
@RequestParam
方面是绝对正确的,但我进一步建议使用Optional<>,因为你不能总是确保使用正确的参数。另外,如果您需要 Integer 或 Long,只需使用该数据类型即可避免稍后在 DAO 中转换类型。
@RequestMapping(value="/data", method = RequestMethod.GET)
public @ResponseBody
Item getItem(@RequestParam("itemid") Optional<Integer> itemid) {
if( itemid.isPresent()){
Item i = itemDao.findOne(itemid.get());
return i;
} else ....
}
要在同一
@PathVariable
端点中接受 @RequestParam
和 /user
:
@GetMapping(path = {"/user", "/user/{data}"})
public void user(@PathVariable(required=false,name="data") String data,
@RequestParam(required=false) Map<String,String> qparams) {
qparams.forEach((a,b) -> {
System.out.println(String.format("%s -> %s",a,b));
}
if (data != null) {
System.out.println(data);
}
}
使用卷曲测试:
要在同一端点中接受路径变量和查询参数:
@RequestMapping(value = "/hello/{name}", method = RequestMethod.POST)
public String sayHi(
@PathVariable("name") String name,
@RequestBody Topic topic,
//@RequestParam(required = false, name = "s") String s,
@RequestParam Map<String, String> req) {
return "Hi "+name +" Topic : "+ topic+" RequestParams : "+req;
}
URL 看起来像:http://localhost:8080/hello/testUser?city=Pune&Pin=411058&state=Maha
在Spring boot:2.1.6中,您可以像下面这样使用:
@GetMapping("/orders")
@ApiOperation(value = "retrieve orders", response = OrderResponse.class, responseContainer = "List")
public List<OrderResponse> getOrders(
@RequestParam(value = "creationDateTimeFrom", required = true) String creationDateTimeFrom,
@RequestParam(value = "creationDateTimeTo", required = true) String creationDateTimeTo,
@RequestParam(value = "location_id", required = true) String location_id) {
// TODO...
return response;
@ApiOperation 是来自 Swagger api 的注释,用于记录 api。
我对此也很感兴趣,并在 Spring Boot 网站上看到了一些示例。
// get with query string parameters e.g. /system/resource?id="rtze1cd2"&person="sam smith"
// so below the first query parameter id is the variable and name is the variable
// id is shown below as a RequestParam
@GetMapping("/system/resource")
// this is for swagger docs
@ApiOperation(value = "Get the resource identified by id and person")
ResponseEntity<?> getSomeResourceWithParameters(@RequestParam String id, @RequestParam("person") String name) {
InterestingResource resource = getMyInterestingResourc(id, name);
logger.info("Request to get an id of "+id+" with a name of person: "+name);
return new ResponseEntity<Object>(resource, HttpStatus.OK);
}
使用@GetMapping注解时,通常在请求中使用@RequestParam而不是@RequestBody。如果你想使用@RequestBody,你应该在API方法中使用@PostMapping注解。