Làm cách nào để truy xuất các tham số truy vấn trong Spring Boot?


121

Tôi đang phát triển một dự án bằng cách sử dụng Spring Boot. Tôi có một bộ điều khiển chấp nhận các yêu cầu GET .

Hiện tại, tôi đang chấp nhận các yêu cầu đối với loại URL sau:

http: // localhost: 8888 / user / data / 002

nhưng tôi muốn chấp nhận các yêu cầu sử dụng tham số truy vấn :

http: // localhost: 8888 / user? data = 002

Đây là mã của bộ điều khiển của tôi:

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

7
@RequestParam(điểm khởi đầu tốt: hướng dẫn chính thức )
kryger

Câu trả lời:


196

Sử dụng @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;
}

1
thì bạn có thể cho biết URL của phương pháp này là gì? Tôi nên thay đổi điều gì
Mehandi Hassan

xin lỗi anh em URL này không hoạt động localhost: 8888 / user? data = 001 Tôi đã nhập URL này
Mehandi Hassan

3
Xóa value = "/" khỏi chú thích ánh xạ yêu cầu. Btw đây là thiết kế thực sự kém. Nếu bạn định truy cập một mục cho một người dùng thì cách còn lại sẽ là user / items / {itemId} .
afraisse

17
Sử dụng @RequestParam khi public @ResponseBody item getitem(@RequestParam("data") String itemid){yêu cầu tham số truy vấn dữ liệu luôn hiện diện. Thay vào đó nếu bạn sử dụng nó theo cách này public @ResponseBody item getitem(@RequestParam Map<String, String> queryParameters){, nó làm cho dữ liệu là không bắt buộc
samsri

3
... Đáng lẽ tôi nên đăng câu trả lời thay vì để lại bình luận bên dưới câu hỏi! : -o
kryger

9

Mặc dù câu trả lời được chấp nhận bởi afraisse là hoàn toàn chính xác về mặt sử dụng @RequestParam, tôi cũng khuyên bạn nên sử dụng <> Tùy chọn vì bạn không thể luôn đảm bảo sử dụng đúng thông số. Ngoài ra, nếu bạn cần Số nguyên hoặc Dài, chỉ cần sử dụng kiểu dữ liệu đó để tránh các kiểu truyền sau này trong 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 ....
}

bạn nhận được Tùy chọn từ đâu?
Joey Gough

1
@JoeyGough được giới thiệu trong Java 8. docs.oracle.com/javase/8/docs/api/java/util/Optional.html
Andrew Grothe

2

Trong khởi động Spring: 2.1.6, bạn có thể sử dụng như sau:

    @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 là một chú thích đến từ api của Swagger, Nó được sử dụng để ghi lại apis.


required = truetheo mặc định
DV82XL

0

Tôi cũng quan tâm đến điều này và xem một số ví dụ trên trang 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);
    }

Xem thêm tại đây

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.