Как всегда принимать первый параметр при запросе типа массива param в пружинном mvc, используя @RequestParam - PullRequest
0 голосов
/ 21 ноября 2018

Я написал этот код.

@GetMapping("/test")
public Response search(@RequestParam String value) {
    System.out.println(value);
    return new Response(value)
}

Какой-то запрос тела, например

/test?value=a&value=b&value=c

, значение привязано a,b,c Я хочу всегда привязывать первый параметр.Возьмите a, игнорируйте b, c.

Есть ли способ использования @RequestParam?Или нужно использовать HttpServletRequest и параметр разбора?

Ответы [ 2 ]

0 голосов
/ 21 ноября 2018

Отличный вопрос!

Я написал этот код, чтобы узнать, как это работает.Я включил его в тестовые пакеты.

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@ActiveProfiles("test")
public class ControllerTest {

    @LocalServerPort
    private int port;

    private URL url;

    @Autowired
    private TestRestTemplate template;

    @Before
    public void setUp() throws Exception {
        this.url = new URL("http://localhost:" + port + "/test?value=a&value=b&value=c");
    }

    @Test
    public void getHello() throws Exception {
        ResponseEntity<String> response = template.getForEntity(url.toString(),
                String.class);
        Assert.assertEquals(HttpStatus.OK, response.getStatusCode());
        Assert.assertEquals(response.getBody(), "a");
        System.out.println("response = " + response);
    }

}

Затем я изменил ваш код так, чтобы он принимал массив строк, и передавал только первый элемент вашему конструктору ответов.

Обратите внимание на изменения вваш код в выражении подписи и возврата.

@GetMapping("/test")
    public String search(@RequestParam String[] value) {
        System.out.println(value);
        return new Response(value[0]);
    }

С помощью вашего теста вы теперь можете исследовать использование типа List для параметра запроса и быстро увидеть, как изменилось поведение.

0 голосов
/ 21 ноября 2018

В этом случае вы можете использовать @RequestParam List<String> value вместо @RequestParam String value и получить первое значение value.get(0), игнорировать остальные из них

Например

http://rentacar.com/api/v1/search?make=audi&model=A8&type=6&type=11&type=12&color=RED&color=GREY

Метод

public List<Vehicle> search(
@RequestParam(value="make", required=false) String make, 
@RequestParam(value="model", required=false) String model, 
@RequestParam(value="type", required=false) List<String> types, 
@RequestParam(value="color", required=false) List<String> colors)
  {
    ....
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...