매개 변수 바인딩을 쉼표로 구분하지 않도록 나열하도록 Spring MVC 요청 수정

Brice Roncace

names간단한 웹 양식에서 보내는 중 입니다.

<form action="test" method="GET">
  <select name="names" multiple="true">
    <option>Doe, Jane</option>
    <option>Doe, John</option>
  </select>
  <input type="submit"/>
</form>

namesA와 바인딩 된 List컨트롤러에서 :

@GetMapping("/test")
public String test(@RequestParam List<String> names, Model m) {
  System.out.println(names.size());
  System.out.println(names);
  return "test";
}

하지만 내 이름 값에 쉼표 ( ,)가 포함되어 있기 때문에 Spring은 단일 이름 값이어야하는 것을 두 개의 문자열로 구문 분석합니다.

GET요청 /test?names=Doe, John(쉼표에서 URL 인코딩을 제거 ,하는 %2C두 개의 문자열 값을 포함하는 결과리스트에 가독성) DoeJohn오히려 단일 값보다 Doe, JohnI 원하는대로.

그러나 다음과 같은 여러 값을 보낼 때 예상대로 작동 /test?names=Doe, Jane&names=Doe, John합니다. 이 경우 두 개의 항목이있는 목록이 있습니다. Doe, JaneDoe, John.

한 가지 해결 방법은 다음을 포함하여 항상 names양식에 값을 보내는 것입니다 .

<input type="hidden" name="names"/>

그런 다음 목록에서 빈 값을 제거합니다. 그러나 나는 이것을 할 필요가 없습니다.

쉼표를 사용하여 문자열 값을 구문 분석하지 않고 대신 목록 속성 값이 단순히 반복 될 것으로 기대하도록 Spring MVC를 구성하는 방법은 ?name=Jon&name=Sue&name=Bob무엇입니까?

Spring Boot 2.3.2를 사용하고 있습니다. 감사!

앨런 헤이

변환은 다음에서 발생하는 것으로 보입니다.

org.springframework.core.convert.support.StringToCollectionConverter

프레임 워크에 의해 등록 된 defult 변환기 여야합니다.

@InitBinder컨트롤러 메서드 또는 컨트롤러 조언을 사용하여 변환기를 등록 할 수 있지만이 기본 변환기를 재정의하거나 비활성화하는 방법을 잘 모르겠습니다.

가장 간단한 방법은 HttpServletRequest에서 직접 매개 변수에 액세스하는 것으로 돌아가는 것입니다.

 @Controller
public class TestController {

    @RequestMapping("/test")
    public String test(@RequestParam("names") List<String> names, HttpServletRequest request) {
        
        //1
        System.out.println(request.getParameterValues("names").length);
        System.out.println(Arrays.toString(request.getParameterValues("names")));
        
        //2
        System.out.println(names.size());
        System.out.println(names);

        return null;
    }
}

추가 실험 후에는 프레임 워크의의 호출을 비활성화 할 수 있습니다 StringToCollectionConverter명시 적에서 변환을 제거하여 봄 부팅에서을 String.classCollection.class로부터 GenericConversionService:

@Autowired
void conversionService(GenericConversionService genericConversionService) {
  List<String> names = genericConversionService.convert("Ed, Al", List.class);
  System.out.println(names.size()); // 2

  genericConversionService.removeConvertible(String.class, Collection.class);

  names = genericConversionService.convert("Ed, Al", List.class);
  System.out.println(names.size()); // 1

}

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Spring MVC : 요청 매개 변수를 일반 목록에 바인딩하는 문제

분류에서Dev

Spring mvc의 컨트롤러 메소드 Bean에 허용되는 바인딩 요청 매개 변수 및 파일을 사용자 정의하십시오.

분류에서Dev

파워 쿼리의 Power BI 매개 변수에서 쉼표로 구분 된 값 목록을 기반으로 행을 제거하려면 어떻게하나요?

분류에서Dev

수신하도록 설정되지 않은 경우에도 경로는 매개 변수를 계속 요청합니다.

분류에서Dev

Http Get이 매개 변수를 사용하거나 사용하지 않고 요청을 수락하도록 강제

분류에서Dev

요청 매개 변수 / 쿼리 매개 변수가 Spring MVC 앱의 요청에 전달되었는지 확인하는 방법은 무엇입니까?

분류에서Dev

Oracle에서 쉼표로 구분 된 값 목록을 매개 변수 입력으로 전달하는 방법

분류에서Dev

Spring MVC-매개 변수 바인딩

분류에서Dev

ASP.NET MVC가 쿼리 매개 변수를 바인딩하지 않도록하려면 어떻게합니까?

분류에서Dev

Python에서 x 요소 뒤에 쉼표가 하나만있는 정수 목록을 문자열로 변환

분류에서Dev

localhost 옆에서 요청을 수신하도록 Spring Boot 구성

분류에서Dev

요청을 메소드 매개 변수로 라우팅하도록 Web API 컨트롤러를 설정하는 방법은 무엇입니까?

분류에서Dev

요청을 메소드 매개 변수로 라우팅하도록 Web API 컨트롤러를 설정하는 방법은 무엇입니까?

분류에서Dev

Spring MVC를 사용하여 URL에서 요청 매개 변수 값을 숨기는 방법

분류에서Dev

모든 매개 변수를 바인딩하지 않는 Spring JDBC 템플릿 (매개 변수 값 가져 오기)

분류에서Dev

* 매개 변수가 하나의 인수와 일치하지 않는 MVC 경로

분류에서Dev

ciphers 매개 변수를 지정하지 않고 기본적으로 사용하도록 curl을 구성하는 방법은 무엇입니까?

분류에서Dev

SOAP 요청을위한 매개 변수 중 하나로 다차원 배열

분류에서Dev

Ninject는 상수 값 매개 변수로 생성자를 지정했는데 Bool에 대한 바인딩을 요구하는 이유는 무엇입니까?

분류에서Dev

쿼리 매개 변수 값을 가져 와서 쉼표로 구분 된 목록으로 변환하는 Scala Regex UDF

분류에서Dev

쉼표 JAVA 함수의 값을 매개 변수로 구분 된 문자열을 전달하는 방법

분류에서Dev

함수의 매개 변수가 정의되지 않았지만 필요한 모든 인수를 전달하도록 호출했습니다.

분류에서Dev

Azure Bearer 토큰을 올바르게 요청하는 방법 또는 "범위"매개 변수를 보내도록 요청하는 이유는 무엇입니까?

분류에서Dev

모든 매개 변수로 MVC 5 바인딩 구현

분류에서Dev

쉼표로 구분 된 문자열을 정수 목록으로 변환하고 유효성 검사

분류에서Dev

구분 기호 쉼표 (,)로 구분 된 텍스트 열의 단어 수로 word_count 열을 설정하도록 테이블을 업데이트합니다.

분류에서Dev

쉼표로 구분 된 매개 변수에서 테이블을 리턴하는 함수에 SQL 조인. 매개 변수가 null 인 경우 모두 결합

분류에서Dev

매개 변수 이름 변경을위한 JAVA SOAP 수정 도움말 요청

분류에서Dev

F # : F #의 목록 형식이 아닌 쉼표로 구분 된 정수만 포함하도록 출력 형식을 지정해야합니다.

Related 관련 기사

  1. 1

    Spring MVC : 요청 매개 변수를 일반 목록에 바인딩하는 문제

  2. 2

    Spring mvc의 컨트롤러 메소드 Bean에 허용되는 바인딩 요청 매개 변수 및 파일을 사용자 정의하십시오.

  3. 3

    파워 쿼리의 Power BI 매개 변수에서 쉼표로 구분 된 값 목록을 기반으로 행을 제거하려면 어떻게하나요?

  4. 4

    수신하도록 설정되지 않은 경우에도 경로는 매개 변수를 계속 요청합니다.

  5. 5

    Http Get이 매개 변수를 사용하거나 사용하지 않고 요청을 수락하도록 강제

  6. 6

    요청 매개 변수 / 쿼리 매개 변수가 Spring MVC 앱의 요청에 전달되었는지 확인하는 방법은 무엇입니까?

  7. 7

    Oracle에서 쉼표로 구분 된 값 목록을 매개 변수 입력으로 전달하는 방법

  8. 8

    Spring MVC-매개 변수 바인딩

  9. 9

    ASP.NET MVC가 쿼리 매개 변수를 바인딩하지 않도록하려면 어떻게합니까?

  10. 10

    Python에서 x 요소 뒤에 쉼표가 하나만있는 정수 목록을 문자열로 변환

  11. 11

    localhost 옆에서 요청을 수신하도록 Spring Boot 구성

  12. 12

    요청을 메소드 매개 변수로 라우팅하도록 Web API 컨트롤러를 설정하는 방법은 무엇입니까?

  13. 13

    요청을 메소드 매개 변수로 라우팅하도록 Web API 컨트롤러를 설정하는 방법은 무엇입니까?

  14. 14

    Spring MVC를 사용하여 URL에서 요청 매개 변수 값을 숨기는 방법

  15. 15

    모든 매개 변수를 바인딩하지 않는 Spring JDBC 템플릿 (매개 변수 값 가져 오기)

  16. 16

    * 매개 변수가 하나의 인수와 일치하지 않는 MVC 경로

  17. 17

    ciphers 매개 변수를 지정하지 않고 기본적으로 사용하도록 curl을 구성하는 방법은 무엇입니까?

  18. 18

    SOAP 요청을위한 매개 변수 중 하나로 다차원 배열

  19. 19

    Ninject는 상수 값 매개 변수로 생성자를 지정했는데 Bool에 대한 바인딩을 요구하는 이유는 무엇입니까?

  20. 20

    쿼리 매개 변수 값을 가져 와서 쉼표로 구분 된 목록으로 변환하는 Scala Regex UDF

  21. 21

    쉼표 JAVA 함수의 값을 매개 변수로 구분 된 문자열을 전달하는 방법

  22. 22

    함수의 매개 변수가 정의되지 않았지만 필요한 모든 인수를 전달하도록 호출했습니다.

  23. 23

    Azure Bearer 토큰을 올바르게 요청하는 방법 또는 "범위"매개 변수를 보내도록 요청하는 이유는 무엇입니까?

  24. 24

    모든 매개 변수로 MVC 5 바인딩 구현

  25. 25

    쉼표로 구분 된 문자열을 정수 목록으로 변환하고 유효성 검사

  26. 26

    구분 기호 쉼표 (,)로 구분 된 텍스트 열의 단어 수로 word_count 열을 설정하도록 테이블을 업데이트합니다.

  27. 27

    쉼표로 구분 된 매개 변수에서 테이블을 리턴하는 함수에 SQL 조인. 매개 변수가 null 인 경우 모두 결합

  28. 28

    매개 변수 이름 변경을위한 JAVA SOAP 수정 도움말 요청

  29. 29

    F # : F #의 목록 형식이 아닌 쉼표로 구분 된 정수만 포함하도록 출력 형식을 지정해야합니다.

뜨겁다태그

보관