Spring Boot에서 쿼리 매개 변수를 어떻게 검색합니까?


121

Spring Boot를 사용하여 프로젝트를 개발 중입니다. GET 요청 을 수락하는 컨트롤러 가 있습니다.

현재 다음 종류의 URL에 대한 요청을 수락하고 있습니다.

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

하지만 쿼리 매개 변수를 사용하여 요청을 수락하고 싶습니다 .

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

내 컨트롤러의 코드는 다음과 같습니다.

@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(좋은 출발점 : 공식 가이드 )
kryger

답변:


196

@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
그렇다면이 방법의 URL은 무엇입니까? 무엇 내가 변화해야
Mehandi 하산

죄송합니다 동생이 URL은 로컬 호스트 작동하지 않습니다 : 8888 / 사용자 데이터 = 001 나 URL을 입력해야?
Mehandi 하산

3
요청 매핑 주석에서 value = "/" 를 제거 합니다 . Btw 이것은 정말 열악한 디자인입니다. 사용자의 항목에 액세스하려는 경우 나머지 방법은 user / items / {itemId} 입니다.
afraisse

17
@RequestParam을 그대로 사용 public @ResponseBody item getitem(@RequestParam("data") String itemid){하려면 데이터 쿼리 매개 변수가 항상 있어야합니다 . 당신이이 방법을 사용하는 대신에 있다면 public @ResponseBody item getitem(@RequestParam Map<String, String> queryParameters){, 그것은하게 데이터를 선택적으로
samsri

3
... 질문 아래에 댓글을 남기는 대신 답변을 게시해야했습니다! : -o
kryger

9

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 ....
}

옵션을 어디서 얻었습니까?
Joey Gough

1
@JoeyGough는 Java 8에 도입되었습니다. docs.oracle.com/javase/8/docs/api/java/util/Optional.html
Andrew Grothe

2

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를 문서화하는 데 사용됩니다.


required = true기본적으로
DV82XL

0

나는 이것에도 관심이 있었고 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);
    }

여기도 참조

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.