인텔리제이 무료버전을 쓰고 있어서 강의와 같은 작업이 안됐다.
근데 일단 이런코드로 요청을 해봤는데
package com.example.WebSample.controller;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
@Slf4j
@RestController
public class SampleController {
@GetMapping(value = "/order/1")
public String getOrder() {
log.info("Get some order");
return "orderId : 1, orderAmount:1000";
}
@PostMapping("/order")
public String createOrder() {
log.info("Create order");
return "order created -> orderId:1, orderAmount:1000";
}
}
PostMapping 에서는 이런 오류가 발생하였다.
2023-09-18 21:37:51.567 WARN 7968 --- [nio-8080-exec-1] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'GET' not supported]
에러는 405 발생
문득 이유가 궁금해졌다. 너무 별 거 아닐 수도 있지만 .. 나는 처음 배워서 잘 모르기 때문에
일단 @PostMapping은 데이터를 전송한다는 의미인데 전송해주는 것이 없어서 오류가 발생하나 ? 라는 생각이 먼저.
- 구글링을 통한 원인
지정된 http method에 맞지 않게 api를 사용해서 그렇다.
특히 405 에러는 Method Not Allowed 를 나타내는 에러이다. 허용되지 않은 Http Method를 사용할 때 발생하는 status code
흠.. 그래도 아직 잘 이해가 가지 않는다.
더 찾아보니까 GET 방식으로 접속을 시도했는데@PostMapping이 되어있어서 그런다고 한다.
-> 그니까 Post 방식의 요청을 받겠다고 했는데 GET요청이 들어왔다는 것
음.. GET 방식의 요청이 뭘까 ? url에 직접 입력하여 들어가는 것을 의미하는 건가
=> ㅇㅇ 맞다 !
내가 접속할 때는 url에 파라미터를 붙여서 갔기 때문에 get 방식으로 인식이 된 건데 매핑은 Post로 하고있으니 오류가 났던 것 !
PostMan을 이용해서 Post 방식의 요청을 해보긴 했다.
이 블로그 참조
https://parkjh7764.tistory.com/212
return 해줬던 문자열이 잘 나오는 것을 확인하였다.
<JSON 형식 요청 보내기>
요청 보내는 코드
@PostMapping("/order")
public String createOrder
(@RequestBody CreateOrderRequest createOrderRequest,
@RequestHeader String userAccountId) {
log.info("Create order : " + createOrderRequest +
", userAccountedId : " + userAccountId);
return "orderId :" + createOrderRequest.getOrderId() +
", orderAmount:" + createOrderRequest.getOrderAmount();
}
@Data
public static class CreateOrderRequest {
private String orderId;
private Integer orderAmount;
}
/order로 접근했을 때 param에 key와 value로 보내주는 것이 아니라 json 형태로 본문에 담아서 보내야한다.
Body 탭에서 raw에 json 형태로 작성. 오른쪽에 옵션이 text로 되어있는데 꼭 JSON으로 바꿔야함 !
@RequestHeader로 받아줄 값은 Headers 탭에 작성.
잘 받아진다.
@RequestBody를 쓰면 json을 이용해서 엄청 큰 데이터도 받을 수 있다.
Get 방식으로 url로 받다보면 전송하는 데이터가 다 드러나게 되고 url 최대 범위를 넘어가버릴 수도 있다.
'공부 > Trouble Shooting' 카테고리의 다른 글
인텔리제이 콘솔 창에 글씨 색 넣기 (0) | 2023.09.19 |
---|---|
인텔리제이에서 h2-console 접속 실패 (0) | 2023.09.19 |
자바 스크립트 select에서 선택한 값 서버로 보내기 (0) | 2023.09.11 |
자바스크립트로 내 현재 위치 서버에 보내기 (0) | 2023.09.11 |
트리거 이용해서 북마크 그룹 수정될 때 수정된 날짜 업데이트 하기 (0) | 2023.09.11 |