인프런 커뮤니티 질문&답변

신민기는위대해요님의 프로필 이미지

작성한 질문수

스프링 프레임워크는 내 손에 [스프1탄]

@RequestBody에 관해서 질문이요.

작성

·

35

0

선생님, 스프1탄 MVC02의 35강을 보고나서 질문드려요.


boardUpdate() Ajax에서 클라이언트가 적은 값을 변수 title, content에 초기화 하고,
그 값이 자바스크립트니까 JSON.stringfy로 JSON으로 변경해주고,
컨트롤러에서 @RequestBody로 그 JSON 값을 자바로 변환해서 비즈니스 로직을 해주고 있다.
맞나요?


근데 insertBoard() 에서도 클라이언트가 적은 값을 fData에 자바스크립트 문자열로 직렬화 해줬는데,
어떻게 변환과정없이 비즈니스 로직이 실행되나요?

답변 1

0

안녕하세요, 인프런 AI 인턴입니다.

신민기는위대해요님, 질문하신 내용에 대해 답변드리겠습니다.

네, 맞습니다. Ajax에서 클라이언트가 입력한 값을 JSON 문자열로 변환한 후, 컨트롤러에서 @RequestBody 어노테이션을 사용하여 JSON 값을 자바 객체로 변환하여 비즈니스 로직을 처리하는 과정이 일반적입니다.

그러나 insertBoard()의 경우, 질문하신 내용만으로는 정확한 변환 과정을 설명드릴 수 있는 정보가 부족합니다. 일반적으로, 클라이언트에서 서버로 데이터를 전송할 때 JSON 형태로 직렬화하여 전송하고, 컨트롤러에서 @RequestBody를 사용하여 자바 객체로 역직렬화하는 과정을 거칩니다. 하지만 fData가 어떤 형태로 어떻게 전송되었는지, 서버 측에서 어떻게 처리되었는지에 대한 구체적인 정보가 없기 때문에, 상세한 답변을 드리기 어렵습니다.

일반적으로 클라이언트에서 서버로 데이터를 전송하고, 서버에서 이를 처리하는 방법에는 여러가지가 있으며, 사용하는 어노테이션(@RequestBody, @ModelAttribute, @RequestParam 등)이나 방식(Form Data, JSON 등)에 따라 데이터를 받는 방식과 처리 과정이 달라집니다.

따라서 insertBoard()에서의 데이터 처리 방식을 이해하시려면, 해당 메소드를 처리하는 컨트롤러의 코드 및 해당 데이터를 어떻게 받고 처리하는지에 대한 코드를 확인하는 것이 가장 정확합니다.

추가적으로 궁금하신 사항이 있다면, 더 구체적인 코드 예시를 제공해주시면 더 상세한 답변을 드릴 수 있을 것 같습니다.

function insertBoard(){
  let fData = $("#frm").serialize();

$
  
  .ajax({
    url : "board/new",
    type : "post",
    data : fData,
    success : function(response)
    ...
  });
}

insertBoard()에서는 form의 요소들을 serialize()하여 fData변수에 대입하고, 이를 JSON.stringfy()없이 data값으로 전달하고 있습니다.

@PostMapping("new")
public void boardInsert(Board vo) {
  mapper.boardInsert(vo); 
}

해당 controller에서는 baordUpdate()와 달리 @RequestBody어노테이션을 쓰지 않고있습니다.

boardUpdate()에서는 선택자.val()값을 자바스크립트 변수에 대입하고 그 값을 JSON으로 바꿔주는데, insertBoard()에서는 serialize()한 자바스크립트 문자열을 fData에 대입한 후 왜 JSON으로 바꿔주지 않아도 되는건가요?