티스토리 뷰

728x90
반응형

Springboot 공부하면서 헷갈리는 내용 기록

 

1. PUT, DELETE 요청 방법 / @RequestBody

 

form 태그에서는 put,delete로 보내면 get으로 들어간다.

그래서 ajax로 put 보냈는데 또 안됨(타임리프 쓰기전에는 잘됬음)

타임리프를 쓰면 RestController -> Controller로 바꿔서 그러는것 같다.

그래서 PutMapping하는곳에만 ResponseBody를 붙여줘도 안된다. (메소드 리턴값에 ResponseBody를 붙이면 되는것 같다.)

 

=> properties에  spring.mvc.hiddenmethod.filter.enabled=true 추가한뒤

form 안에 <input type="hidden" name="_method" value="put"/> 추가하니까 put으로 요청이 가능해졌다.

spring.mvc.hiddenmethod.filter.enabled=true
<input type="hidden" name="_method" value="put"/>

 

그래도 Controller에서 RequestBody로 받으면 안되고 ModelAttribute로 받아야 작동한다. (이유를 모르겠는데 타임리프 쓰기 전에는 RequestBody로 받았었음, form으로 보내줄때만 그런가)

 

=> form태그로 값을 서버에 보내주게 되면 Json형식으로 보내주는게 아니기 때문에 @RequestBody를 쓰면 에러가 난다. 그래서 RequestBody를 제거하고 받는 Dto에 Setter를 추가하면 정상적으로 받을 수 있다.

 

그리고 ModelAttribute는 RequestBody와 다르게 set이 없으면 넣어주지 못한다. 원래 이게 맞는것 같은데 RequestBody는 특이하게 set이 없어도 자동으로 넣어준다.

 

자세한 설명은 밑에 자료를 보면 도움이 될 것같다.

jojoldu.tistory.com/407

 

@Request Body에서는 Setter가 필요없다?

회사에서 근무하던중 새로오신 신입 개발자분이 저에게 하나의 질문을 했습니다. POST 요청시에 Setter 가 필요없는것 같다고. 여태 제가 알던것과는 달라서 어떻게 된 일인지 궁금했습니다. 정말

jojoldu.tistory.com

 

2. @ModelAttribute

 

@ModelAttribute를 붙이는 것과 안붙이고 받는차이를 정확히 몰랐다 왜냐면 둘다 Setter를 선언해줘야 했기 때문에 @ModelAttribute를 왜 붙이나 했는데 @ModelAttribute가 붙은 객체는 view단에서 데이터를 호출할 수 있기때문에 쓰이는 것 같다.

 

3. 타임리프 사용할때 RestController

 

@RestController를 사용거나 @ResponseBody가 붙어있으면 return 문자열시 html을 안띄워주고 문자열만 띄워준다.

Controller는 사용자의 요청이 오면 등록된 ViewResolver를 통해 사용자에게 text/html 타입의 응답을 보내주게 된다.

 

RestController는 ViewPage를 통해 출력되는것이 아니라 HTTP ResponseBody에 직접 쓰여지게 된다. 사용자의 요청이 오면 Message Converter를 통해서 application/json, text/plain 등 알맞는 형태로 리턴되게 된다.

 

아직 타임리프가 어떻게 동작하는지 잘 모르기때문에 더 헷갈리는것 같다.

 

 

 

반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28