Notice
Recent Posts
Recent Comments
Link
혜야의 코딩스토리
[Spring] @RequestBody / @ResponseBody 어노테이션이란? 본문
웹페이지에서 json으로 request한 파라미터들을 java에서 받으려면 java Object로의 변환이 필요하며,
response시에도 java Object에서 json으로 변환이 필요하다.
이런 작업들을 해주는것이 @RequestBody 와 @ResponseBody 이다.
컨트롤러에 두 어노테이션을 쓰게 되면 JSON이나 key/value 방식의 xml등으로 송수신 할 수 있다.
@RequestBody : HTTP요청의 body내용을 자바 객체로 매핑하는 역할
@ResponseBody : 자바 객체를 HTTP요청의 body내용으로 매핑하는 역할
💡 정리
클라이언트에서 =>서버로 필요한 데이터를 요청하기 위해 json데이터를 요청 본문에 담아서 서버로 보내면
서버에서는 @RequestBody를 사용하여 HTTP요청 본문에 담긴 값들을 자가 객체로 변환시켜 객체에 저장한다.
서버에서 => 클라이언트로 응답 데이터를 전송하기 위해 @ResponseBody를 사용하여
자바 객체를 HTTP응답 본문의 객체로 변환하여 클라이언트로 전송한다.
@RequestBody 예시
💡MessageController
package com.example.spring02.controller.message;
import javax.inject.Inject;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.example.spring02.model.message.dto.MessageDTO;
import com.example.spring02.service.message.MessageService;
@RestController
@RequestMapping("messages/*")
public class MessageController {
@Inject
MessageService messageService;
@RequestMapping(value = "/")
public ResponseEntity<String> addMessage(@RequestBody MessageDTO dto){
//ResponseEntity : 리턴 값을 json+에러 메시지를 함께 처리해준다.
ResponseEntity<String> entity=null;
try {
messageService.addMessage(dto);
entity=new ResponseEntity<>("success",HttpStatus.OK);
} catch (Exception e) {
e.printStackTrace();
entity=new ResponseEntity<>(e.getMessage(),HttpStatus.BAD_REQUEST);
//ex)400에러 : 상호간 변수가 안맞을 때
}
return entity;
}
}
💡MessageServiceImpl
package com.example.spring02.service.message;
import javax.inject.Inject;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.example.spring02.model.message.dao.MessageDAO;
import com.example.spring02.model.message.dao.PointDAO;
import com.example.spring02.model.message.dto.MessageDTO;
@Service
public class MessageServiceImpl implements MessageService {
//Bean을 2개 이상 주입시 따로처리함. 즉, Inject는 각각 해야함.
@Inject
MessageDAO messageDao;
@Inject
PointDAO pointDao;
//트랜잭션 처리 대상 method (한 트랜잭션의 연산들은 모두 성공하거나, 반대로 모두 실패된다.)
@Transactional
@Override
public void addMessage(MessageDTO dto) {
//메시지를 테이블에 저장
messageDao.create(dto);
//메시지를 보낸 회원에게 10포인트 추가
pointDao.updatePoint(dto.getSender(), 10);
}
@Override
public MessageDTO readMessage(int mid) {
// TODO Auto-generated method stub
return null;
}
}
💡MessageDAOImpl
package com.example.spring02.model.message.dao;
import javax.inject.Inject;
import org.apache.ibatis.session.SqlSession;
import org.springframework.stereotype.Repository;
import com.example.spring02.model.message.dto.MessageDTO;
@Repository
public class MessageDAOImpl implements MessageDAO {
@Inject
SqlSession sqlSession;
@Override
public void create(MessageDTO dto) {
sqlSession.insert("message.create", dto);
}
@Override
public MessageDTO readMessage(int mid) {
// TODO Auto-generated method stub
return null;
}
@Override
public void updateState(int mid) {
// TODO Auto-generated method stub
}
}
💡 Advanced REST client 프로그램으로 테스트한 결과 success !

참고
'꿈 : 멋진 개발자 🧸 > Java' 카테고리의 다른 글
[Spring] spring MVC redirect시 https -> http로 요청되는 문제 (0) | 2023.10.17 |
---|---|
[Spring] Interceptor 인터셉터 (로그인 세션 체크 Interceptor로 처리하기) (0) | 2022.10.04 |
[Spring] AOP 관점 지향 프로그래밍 (0) | 2022.09.30 |
[Spring] 스프링 프레임워크의 특징 (0) | 2022.09.23 |
[Spring] 스프링 회원 관리 프로그램 (0) | 2022.09.23 |