How take always first parameter when requested array type param in spring mvc using @RequestParam












1














I wrote this code.



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


Some body request like



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


value binded a,b,c
I want always bind first parmeter. Take a, ignore b, c.



Is there way using @RequestParam?
Or have to use HttpServletRequest and parsing parameter?










share|improve this question



























    1














    I wrote this code.



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


    Some body request like



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


    value binded a,b,c
    I want always bind first parmeter. Take a, ignore b, c.



    Is there way using @RequestParam?
    Or have to use HttpServletRequest and parsing parameter?










    share|improve this question

























      1












      1








      1







      I wrote this code.



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


      Some body request like



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


      value binded a,b,c
      I want always bind first parmeter. Take a, ignore b, c.



      Is there way using @RequestParam?
      Or have to use HttpServletRequest and parsing parameter?










      share|improve this question













      I wrote this code.



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


      Some body request like



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


      value binded a,b,c
      I want always bind first parmeter. Take a, ignore b, c.



      Is there way using @RequestParam?
      Or have to use HttpServletRequest and parsing parameter?







      arrays spring model-view-controller parameters request






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Nov 21 at 2:49









      KI-YOUNG BANG

      595




      595
























          2 Answers
          2






          active

          oldest

          votes


















          0














          In this case you can use @RequestParam List<String> value instead of @RequestParam String value, and get the first value value.get(0) ignore the rest of them



          For Example



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


          Method



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





          share|improve this answer





























            0














            Great question!



            I wrote this code to find out how this works. I included it in the test packages.



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

            }


            I then modified your code to accept an array of strings, and only pass the first element to your Response Constructor.



            Notice the changes in your code in the signature and return statement.



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


            With your test, you can now explore using a List type for your request param and quickly see how the behaviour has changed.






            share|improve this answer





















              Your Answer






              StackExchange.ifUsing("editor", function () {
              StackExchange.using("externalEditor", function () {
              StackExchange.using("snippets", function () {
              StackExchange.snippets.init();
              });
              });
              }, "code-snippets");

              StackExchange.ready(function() {
              var channelOptions = {
              tags: "".split(" "),
              id: "1"
              };
              initTagRenderer("".split(" "), "".split(" "), channelOptions);

              StackExchange.using("externalEditor", function() {
              // Have to fire editor after snippets, if snippets enabled
              if (StackExchange.settings.snippets.snippetsEnabled) {
              StackExchange.using("snippets", function() {
              createEditor();
              });
              }
              else {
              createEditor();
              }
              });

              function createEditor() {
              StackExchange.prepareEditor({
              heartbeatType: 'answer',
              autoActivateHeartbeat: false,
              convertImagesToLinks: true,
              noModals: true,
              showLowRepImageUploadWarning: true,
              reputationToPostImages: 10,
              bindNavPrevention: true,
              postfix: "",
              imageUploader: {
              brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
              contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
              allowUrls: true
              },
              onDemand: true,
              discardSelector: ".discard-answer"
              ,immediatelyShowMarkdownHelp:true
              });


              }
              });














              draft saved

              draft discarded


















              StackExchange.ready(
              function () {
              StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53404627%2fhow-take-always-first-parameter-when-requested-array-type-param-in-spring-mvc-us%23new-answer', 'question_page');
              }
              );

              Post as a guest















              Required, but never shown

























              2 Answers
              2






              active

              oldest

              votes








              2 Answers
              2






              active

              oldest

              votes









              active

              oldest

              votes






              active

              oldest

              votes









              0














              In this case you can use @RequestParam List<String> value instead of @RequestParam String value, and get the first value value.get(0) ignore the rest of them



              For Example



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


              Method



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





              share|improve this answer


























                0














                In this case you can use @RequestParam List<String> value instead of @RequestParam String value, and get the first value value.get(0) ignore the rest of them



                For Example



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


                Method



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





                share|improve this answer
























                  0












                  0








                  0






                  In this case you can use @RequestParam List<String> value instead of @RequestParam String value, and get the first value value.get(0) ignore the rest of them



                  For Example



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


                  Method



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





                  share|improve this answer












                  In this case you can use @RequestParam List<String> value instead of @RequestParam String value, and get the first value value.get(0) ignore the rest of them



                  For Example



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


                  Method



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






                  share|improve this answer












                  share|improve this answer



                  share|improve this answer










                  answered Nov 21 at 5:16









                  Deadpool

                  3,9592326




                  3,9592326

























                      0














                      Great question!



                      I wrote this code to find out how this works. I included it in the test packages.



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

                      }


                      I then modified your code to accept an array of strings, and only pass the first element to your Response Constructor.



                      Notice the changes in your code in the signature and return statement.



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


                      With your test, you can now explore using a List type for your request param and quickly see how the behaviour has changed.






                      share|improve this answer


























                        0














                        Great question!



                        I wrote this code to find out how this works. I included it in the test packages.



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

                        }


                        I then modified your code to accept an array of strings, and only pass the first element to your Response Constructor.



                        Notice the changes in your code in the signature and return statement.



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


                        With your test, you can now explore using a List type for your request param and quickly see how the behaviour has changed.






                        share|improve this answer
























                          0












                          0








                          0






                          Great question!



                          I wrote this code to find out how this works. I included it in the test packages.



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

                          }


                          I then modified your code to accept an array of strings, and only pass the first element to your Response Constructor.



                          Notice the changes in your code in the signature and return statement.



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


                          With your test, you can now explore using a List type for your request param and quickly see how the behaviour has changed.






                          share|improve this answer












                          Great question!



                          I wrote this code to find out how this works. I included it in the test packages.



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

                          }


                          I then modified your code to accept an array of strings, and only pass the first element to your Response Constructor.



                          Notice the changes in your code in the signature and return statement.



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


                          With your test, you can now explore using a List type for your request param and quickly see how the behaviour has changed.







                          share|improve this answer












                          share|improve this answer



                          share|improve this answer










                          answered Nov 21 at 5:21









                          Lachlan Lindsay

                          197113




                          197113






























                              draft saved

                              draft discarded




















































                              Thanks for contributing an answer to Stack Overflow!


                              • Please be sure to answer the question. Provide details and share your research!

                              But avoid



                              • Asking for help, clarification, or responding to other answers.

                              • Making statements based on opinion; back them up with references or personal experience.


                              To learn more, see our tips on writing great answers.





                              Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


                              Please pay close attention to the following guidance:


                              • Please be sure to answer the question. Provide details and share your research!

                              But avoid



                              • Asking for help, clarification, or responding to other answers.

                              • Making statements based on opinion; back them up with references or personal experience.


                              To learn more, see our tips on writing great answers.




                              draft saved


                              draft discarded














                              StackExchange.ready(
                              function () {
                              StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53404627%2fhow-take-always-first-parameter-when-requested-array-type-param-in-spring-mvc-us%23new-answer', 'question_page');
                              }
                              );

                              Post as a guest















                              Required, but never shown





















































                              Required, but never shown














                              Required, but never shown












                              Required, but never shown







                              Required, but never shown

































                              Required, but never shown














                              Required, but never shown












                              Required, but never shown







                              Required, but never shown







                              Popular posts from this blog

                              Wiesbaden

                              Marschland

                              Dieringhausen