[SPRING] Post 요청에 @Requestparam 주석을 사용할 수 있습니까?
SPRINGPost 요청에 @Requestparam 주석을 사용할 수 있습니까?
이 컨트롤러 메서드가 있습니다.
@PostMapping(
value = "/createleave",
params = {"start","end","hours","username"})
public void createLeave(@RequestParam(value = "start") String start,
@RequestParam(value = "end") String end,
@RequestParam(value = "hours") String hours,
@RequestParam(value = "username") String username){
System.out.println("Entering createLeave " + start + " " + end + " " + hours + " " + username);
LeaveQuery newLeaveQuery = new LeaveQuery();
Account account = accountRepository.findByUsername(username);
newLeaveQuery.setAccount(account);
newLeaveQuery.setStartDate(new Date(Long.parseLong(start)));
newLeaveQuery.setEndDate(new Date(Long.parseLong(end)));
newLeaveQuery.setTotalHours(Integer.parseInt(hours));
leaveQueryRepository.save(newLeaveQuery);
}
그러나이 끝점에 게시물 요청을 보내면 다음과 같은 메시지가 표시됩니다.
"{"timestamp":1511444885321,"status":400,"error":"Bad Request","exception":"org.springframework.web.bind.UnsatisfiedServletRequestParameterException","message":"Parameter conditions \"start, end, hours, username\" not met for actual request parameters: ","path":"/api/createleave"}"
@PostMapping 주석에서 params 인수를 제거하면 더 일반적인 오류가 발생합니다. 매개 변수의 끝, 시간 및 사용자 이름과 함께 보내지는 동안 필요한 첫 번째 매개 변수 (시작)를 찾을 수 없다고 표시됩니다.
메서드 봄에 게시물 mvc에서 param을 얻는 방법?
이 게시물에서 @RequestParam은 get 메소드에만 사용할 수 있지만 @RequestParam을 제거하고 @PostMapping 주석의 params 인수를 사용하면 여전히 작동하지 않습니다. 나는 @RequestBody를 사용할 수 있지만 4 개의 매개 변수에 대해 클래스를 만들고 싶지는 않습니다. 아무도 내가이 일을 어떻게 할 수 있는지 말해 줄 수 없습니까?
고맙습니다
편집 : 나는 여기서 읽는거야 https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/bind/annotation/RequestMapping.html#params-- 인수 params isn ' 정확히 내가 생각했던 것. 그것은 조건으로 사용되는 것 같습니다. 매개 변수 세트가 값과 일치하면 엔드 포인트 컨트롤러 메소드가 활성화됩니다.
해결법
-
==============================
1.당신이 원하는 것은 근본적으로 잘못된 것입니다. POST 요청은 @RequestBody를 통해 매핑되는 본문 페이로드의 데이터를 보냅니다. @RequestParam은 / url? start = foo와 같은 URL 매개 변수를 통해 데이터를 매핑하는 데 사용됩니다. @RequestParam을 사용하여 @RequestBody 작업을 수행하십시오.
당신이 원하는 것은 근본적으로 잘못된 것입니다. POST 요청은 @RequestBody를 통해 매핑되는 본문 페이로드의 데이터를 보냅니다. @RequestParam은 / url? start = foo와 같은 URL 매개 변수를 통해 데이터를 매핑하는 데 사용됩니다. @RequestParam을 사용하여 @RequestBody 작업을 수행하십시오.
양식 데이터로 인코딩 된 데이터를 Map
으로 직접 매핑 할 수 없습니다. -
==============================
2.@RequestParam 대신 @RequestBody를 사용해야합니다. 그리고 전체 개체를 요청 본문으로 제공해야합니다. @RequestParam은 POST 메서드가 아니라 GET 용입니다.
@RequestParam 대신 @RequestBody를 사용해야합니다. 그리고 전체 개체를 요청 본문으로 제공해야합니다. @RequestParam은 POST 메서드가 아니라 GET 용입니다.
당신은 뭔가를 할 수 있습니다. public saveUser (@RequestBody 사용자 사용자) {사용자와 함께 작업}
예를 들어 User 객체로 매핑됩니다.
-
==============================
3.
@PostMapping("/createleave") public void createLeave(@RequestParam Map<String, String> requestParams){ String start = requestParams.get("start"); String end= requestParams.get("end"); String hours= requestParams.get("hours"); String username = requestParams.get("username"); System.out.println("Entering createLeave " + start + " " + end + " " + hours + " " + username); }
이것은 multipart / form-data enctype 게시 요청을위한 것입니다.
from https://stackoverflow.com/questions/47457382/can-i-use-requestparam-annotation-for-a-post-request by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 상자 캐시 제어 헤더 필터를 바로 사용할 수 있습니까? (0) | 2019.03.23 |
---|---|
[SPRING] Google App Engine 애플리케이션 인스턴스 재활용 및 응답 시간 (0) | 2019.03.23 |
[SPRING] Spring batch 여러 단계를 병렬로 파티션하기? (0) | 2019.03.23 |
[SPRING] 봄 보안 사용자 정의 AuthenticationException 메시지 (0) | 2019.03.23 |
[SPRING] 다른 DAO에서 하나의 DAO를 호출합니까? (0) | 2019.03.23 |