스프링 MVC 채우기 @RequestParamMap
Spring MVC @Controller에 다음 방법이 있습니다.
@RequestMapping(method = RequestMethod.GET)
public String testUrl(@RequestParam(value="test") Map<String, String> test) {
(...)
}
저는 이렇게 부릅니다.
http://myUrl?test[A]=ABC&test[B]=DEF
그러나 "test" RequestParam 변수는 항상 null입니다.
"테스트" 변수를 채우려면 어떻게 해야 합니까?
자세한 내용은 여기 https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/bind/annotation/RequestParam.html 에서 확인하십시오.
메서드 매개 변수가 Map 또는 MultiValueMap이고 매개 변수 이름이 지정되지 않은 경우 모든 요청 매개 변수 이름과 값이 맵 매개 변수에 채워집니다.
그래서 여러분은 이렇게 정의를 바꿀 것입니다.
@RequestMapping(method = RequestMethod.GET)
public String testUrl(@RequestParam Map<String, String> parameters)
{
(...)
}
그리고 url http://myUrl?A=DEP&B=DEF를 호출한 경우 매개 변수에 표시됩니다.
당신은 당신의 방법으로
parameters.get("A");
parameters.get("B");
Spring에 의해 채워져야 하는 지도를 포함하는 새로운 클래스를 만들고 그 클래스를 사용할 수 있습니다.@RequestMapping
주석이 달린 방법
예제에서는 새 클래스를 만듭니다.
public static class Form {
private Map<String, String> test;
// getters and setters
}
그러면 사용할 수 있습니다.Form
매개 변수로 사용할 수 있습니다.
@RequestMapping(method = RequestMethod.GET)
public String testUrl(Form form) {
// use values from form.getTest()
}
Spring에는 동일한 이름을 가진 여러 매개 변수에서 HashMap으로 기본 변환 전략이 없습니다.그러나 목록, 배열 또는 집합으로 쉽게 변환할 수 있습니다.
@RequestMapping(value = "/testset", method = RequestMethod.GET)
public String testSet(@RequestParam(value = "test") Set<String> test) {
return "success";
}
나는 우체부와 같이 테스트를 했습니다.http://localhost:8080/mappings/testset?test=ABC&test=DEF
[ABC, DEF] 데이터가 있는 세트가 표시됩니다.
당신의 질문은 다른 관점에서 고려될 필요가 있습니다.
- 첫 번째 부분:
질문의 제목에 언급된 것처럼, 어떻게 가지고 있는가 하는 것입니다.Map<String, String>
~하듯이@RequestParam
.
이 끝점을 고려합니다.
@GetMapping(value = "/map")
public ResponseEntity getData(@RequestParam Map<String, String> allParams) {
String str = Optional.ofNullable(allParams.get("first")).orElse(null);
return ResponseEntity.ok(str);
}
다음을 통해 전화할 수 있습니다.
http://<ip>:<port>/child/map?first=data1&second=data2
코드를 디버깅하면 다음 값을 얻을 수 있습니다.
> allParams (size = 2)
> first = data1
> second = data2
그리고 요청된 URL의 응답은 다음과 같습니다.data1
.
- 두 번째 부분:
당신의 요청된 URL이 보여주듯이 (다른 답변의 코멘트에서 당신은 또한 말했습니다), 당신은 필요합니다.array
url로 전달됩니다.
이 끝점을 고려합니다.
public ResponseEntity<?> getData (@RequestParam("test") Long[] testId,
@RequestParam("notTest") Long notTestId)
이 API를 호출하고 적절한 값을 전달하려면 다음과 같은 방법으로 매개 변수를 전달해야 합니다.
?test=1&test=2¬Test=3
모든.test
값은 다음을 통해 도달할 수 있습니다.test[0]
또는test[1]
당신의 코드로.
- 세 번째 부분:
다음과 같은 요청된 URL 매개 변수를 다시 확인합니다.test[B]
놓는 것brackets
(또는)[
]
)를 url로 변환하는 것은 일반적으로 불가능합니다.당신은 동등한 것을 넣어야 합니다.ASCII
와 코드를 맞추다.%
서명하다.
예를들면[
와 같음%5B
그리고.]
와 같음%5D
.
예를 들어,test[0]
되지요test%5B0%5D
.
더ASCII
코드: https://ascii.cl/
저는 클라이언트가 변수 매개 변수의 두 그룹을 보내는 비슷한 상황에 직면했습니다.이 그룹들을 부르자.foo
그리고.bar
요청은 다음과 같습니다.
GET /search?page=2&size=10&foo[x]=aaa&foo[y]=bbb&bar[z]=ccc
저는 이 매개변수들을 두 개의 다른 지도에 매핑하고 싶었습니다.다음과 같은 것:
@GetMapping("/search")
public Page<...> search(Pageable pageable,
@RequestParam(...) Map<String, String> foo,
@RequestParam(...) Map<String, String> bar) {
...
}
@RequestParam
저한테도 안 통했어요대신 두 개의 유형 필드가 있는 모델 클래스를 만들었습니다.Map<>
변수 이름 조 매 변 이 름 일foo
그리고.bar
(@Data
이라lombok.Data
).
@Data
public static class FooBar {
Map<String, String> foo;
Map<String, String> bar;
}
컨트롤러 코드가 다음으로 변경되었습니다.
@GetMapping("/search")
public Page<...> search(Pageable pageable, FooBar fooBar) {
...
}
시GET /search?page=2&size=10&foo[x]=aaa&foo[y]=bbb&bar[z]=ccc
봄은 지도를 인스턴스화하고 채웠습니다.fooBar.getFoo()
열값/이있는쇠 ▁keys▁withx
/aaa
그리고.y
/bbb
그리고.fooBar.getBar()
와 함께z
/ccc
.
MultiValueMap을 사용할 수 있습니다.
다중값 맵<문자열, 문자열>
@RequestMapping(method = RequestMethod.GET)
public String testUrl(@RequestParam(value="test") MultiValueMap<String, String> test) {
(...)
}
테스트 중에는 테스트[A], 테스트[B]를 사용하지 않습니다.아래와 같이 사용하시면 됩니다.
http://myUrl?test=ABC&test=DEF
테스트 결과는 인쇄 시 아래 형식으로 표시됩니다.
테스트 = {[ABC, DEF]}
언급URL : https://stackoverflow.com/questions/47418489/spring-mvc-populate-requestparam-mapstring-string
'programing' 카테고리의 다른 글
여러 개를 사용할 수 있음처음 실패할 때 가드가 모두 실행됨 (0) | 2023.08.01 |
---|---|
목표-C 구조의 기본값 및 테스트 방법 (0) | 2023.08.01 |
MariaDB가 소켓을 통해 연결할 수 없음 (0) | 2023.08.01 |
app.all('*')과 app.use('/')의 차이 (0) | 2023.08.01 |
드롭다운 목록(요소 선택)에서 기본 화살표 아이콘을 제거하는 방법은 무엇입니까? (0) | 2023.08.01 |