Как передать необязательные параметры запроса с помощью Groovy?

Я хотел бы передать необязательные параметры URL-адресу, используя micronaut с groovy. Я провел много исследований, но не смог найти подходящего ответа.

@Get('/product/{country}/?

Я хотел бы передать сортировку и дату в качестве дополнительных параметров для этого URL-адреса. Ценю вашу помощь.


person Bikram Singh    schedule 23.03.2020    source источник


Ответы (2)


Вы можете передать необязательные параметры сортировки и даты в качестве значений запроса, например:

@Controller('/')
@CompileStatic
class WithOptionalParameterController {
    @Get('/product/{country}{?sort,date}')
    String productsForCountry(String country, 
                              @Nullable @Pattern(regexp = 'code|title') String sort, 
                              @Nullable String date) {
        "Products for $country sorted by $sort and there is also date $date."
    }
}

И это можно назвать так, указав сортировку и дату:

$ curl 'http://localhost:8080/product/chile?sort=code&date=23.3.2020'
Products for chile sorted by code and there is also date 23.3.2020.

Или без даты:

$ curl 'http://localhost:8080/product/chile?sort=code'
Products for chile sorted by code and there is also date null.

Или без сортировки и даты:

$ curl 'http://localhost:8080/product/chile'
Products for chile sorted by null and there is also date null.

Пример для POST, где вы должны добавить аннотацию @QueryValue для параметров запроса:

@Consumes([MediaType.TEXT_PLAIN])
@Post('/product/{country}{?sort,date}')
String productsForCountry(String country, 
                          @Nullable @Pattern(regexp = 'code|title') @QueryValue String sort,
                          @Nullable @QueryValue String date,
                          @Body String body) {
    "Products for $country sorted by $sort and there is also date $date. Body is $body."
}

И это можно назвать так:

$ curl -X POST 'http://localhost:8080/product/chile?sort=code&date=23.3.2020' -H "Content-Type: text/plain" -d 'some body'
Products for chile sorted by code and there is also date 23.3.2020. Body is some body.
person cgrim    schedule 23.03.2020
comment
большой! Спасибо, это работает. Есть ли способ передать параметры с помощью запроса @Post? - person Bikram Singh; 23.03.2020
comment
Я добавил также пример для запроса POST. Вы должны добавить аннотацию @QueryValue для параметров запроса, иначе он попытается загрузить их из тела. - person cgrim; 23.03.2020

используйте необязательную аннотацию, например

@Get("/optional")
String optional(@QueryValue Optional<Integer> max) {
  return "Parameter Value: " + max.orElse(10);
}
person Jimmy Obonyo Abor    schedule 06.05.2021