[SPRING] @RequestParam에리스트 바인딩하기
SPRING@RequestParam에리스트 바인딩하기
이런 식으로 양식의 매개 변수를 보내고 있습니다.
myparam[0] : 'myValue1'
myparam[1] : 'myValue2'
myparam[2] : 'myValue3'
otherParam : 'otherValue'
anotherParam : 'anotherValue'
...
매개 변수를 추가하여 컨트롤러 메서드에서 모든 매개 변수를 가져올 수 있음을 알고 있습니다.
public String controllerMethod(@RequestParam Map<String, String> params){
....
}
매개 변수 myParam [] (다른 것들은 제외)을리스트 나 배열 (인덱스 순서를 유지하는 모든 것)에 바인딩하려고합니다. 그래서 다음과 같은 구문을 시도했습니다 :
public String controllerMethod(@RequestParam(value="myParam") List<String> myParams){
....
}
과
public String controllerMethod(@RequestParam(value="myParam") String[] myParams){
....
}
그러나 그들 중 누구도 myParams를 구속하고 있지 않습니다. 지도에 값을 추가하더라도 매개 변수를 바인딩 할 수 없습니다.
public String controllerMethod(@RequestParam(value="myParam") Map<String, String> params){
....
}
목록 속성이있는 @ModelAttribute와 같은 객체를 만들지 않고 일부 매개 변수를 목록이나 배열에 바인딩하는 구문이 있습니까?
감사
해결법
-
==============================
1.@RequestParam의 배열은 같은 이름의 여러 매개 변수를 바인딩하는 데 사용됩니다.
@RequestParam의 배열은 같은 이름의 여러 매개 변수를 바인딩하는 데 사용됩니다.
myparam=myValue1&myparam=myValue2&myparam=myValue3
@ ModelAttribute 스타일의 인덱싱 된 매개 변수를 바인딩해야한다면 @ModelAttribute가 필요하다고 생각합니다.
-
==============================
2.아니면 그냥 그렇게 할 수 있습니다 :
아니면 그냥 그렇게 할 수 있습니다 :
public String controllerMethod(@RequestParam(value="myParam[]") String[] myParams){ .... }
예를 들어 다음과 같은 형태로 작동합니다.
<input type="checkbox" name="myParam[]" value="myVal1" /> <input type="checkbox" name="myParam[]" value="myVal2" />
이것은 가장 간단한 해결책입니다 :)
-
==============================
3.Donal Fellows가 말한 것을 보완하면서 @RequestParam과 함께 List를 사용할 수 있습니다.
Donal Fellows가 말한 것을 보완하면서 @RequestParam과 함께 List를 사용할 수 있습니다.
public String controllerMethod(@RequestParam(value="myParam") List<ObjectToParse> myParam){ .... }
희망이 도움이됩니다!
-
==============================
4.이것을 달성 할 수있는 한 가지 방법은 목록에 대한 래퍼 클래스를 만드는 것입니다. 이렇게 :
이것을 달성 할 수있는 한 가지 방법은 목록에 대한 래퍼 클래스를 만드는 것입니다. 이렇게 :
class ListWrapper { List<String> myList; // getters and setters }
그러면 컨트롤러 메소드 서명은 다음과 같습니다.
public String controllerMethod(ListWrapper wrapper) { .... }
요청에서 전달하는 컬렉션 이름이 래퍼 클래스의 컬렉션 필드 이름과 일치하는 경우 @RequestParam 또는 @ModelAttribute 주석을 사용할 필요가 없습니다. 예를 들어 요청 매개 변수는 다음과 같아야합니다.
myList[0] : 'myValue1' myList[1] : 'myValue2' myList[2] : 'myValue3' otherParam : 'otherValue' anotherParam : 'anotherValue'
-
==============================
5.Requests가 RequestMethod.GET 인 경우 @RequestParam List
groupVal을 사용할 수 있습니다. Requests가 RequestMethod.GET 인 경우 @RequestParam List
groupVal을 사용할 수 있습니다. 그런 다음 매개 변수 목록을 사용하여 서비스를 호출하는 것은 다음과 같이 간단합니다.
API_URL?groupVal=kkk,ccc,mmm
-
==============================
6.아래처럼 체크 박스 토글로 숨겨진 필드 값 변경 ...
아래처럼 체크 박스 토글로 숨겨진 필드 값 변경 ...
HTML :
<input type='hidden' value='Unchecked' id="deleteAll" name='anyName'> <input type="checkbox" onclick="toggle(this)"/> Delete All
스크립트:
function toggle(obj) {`var $input = $(obj); if ($input.prop('checked')) { $('#deleteAll').attr( 'value','Checked'); } else { $('#deleteAll').attr( 'value','Unchecked'); } }
from https://stackoverflow.com/questions/4596351/binding-a-list-in-requestparam by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] http 요청 인터셉터를 추가하는 스프링 부트 (0) | 2018.12.09 |
---|---|
[SPRING] 직렬화 관점에서 Spring 세션 범위 bean (컨트롤러)과 서비스에 대한 참조 (0) | 2018.12.09 |
[SPRING] YAML을 사용하여 Spring @PropertySource (0) | 2018.12.09 |
[SPRING] 봄 RestTemplate 시간 초과 (0) | 2018.12.09 |
[SPRING] applicationContext를 여러 파일로 분할 (0) | 2018.12.09 |