반응형
@Controller
// 일반적인 MVC Controller의 컨트롤러.. 이를 사용한 클래스는 객체를 자동으로 Wrapping 해주지 않는다.
@RestController
// 위의 Controller와 같은 역할을 하지만(Servlet Request, Response 핸들링),
// Rest에 적합한 Controller로써, @RequestBody, @ResponseBody를 사용하지 않아도 알아서 Convert를 해서 핸들링한다.
@RequestBody
// Request로 받은 Input을 자동적으로 JSON으로 Wrapping해서 가져온다.
@ResponseBody
// Response로 나가는 output을 자동적으로 JSON으로 Wrapping해서 내보낸다.
// 아래는.. 게시판을 만들면서 사용했던 소스코드 중 하나이다.
@RestController
public class BoardRestController {
@RequestMapping(value = "/board/changeName", method = RequestMethod.GET)
public Callable changeAuthorName(String ip) {
Author author = boardService.getAuthorByIp(ip);
if (author != null) {
if (author.getChangeCount() > 0) {
author.setName(boardService.getRandomAlias());
author.setChangeCount(author.getChangeCount() - 1);
boardService.updateAuthorName(author);
}
}
return () -> author;
}
}
/*
보다시피, Return type이 Custom 타입이다. "Author" 라는 클래스를 정의하고 사용할 수 있는데,
받는 측에서는 해당 Author를 JSON으로 변환된 형태로 받게 된다.
이는 Spring에 지니고 있는 JacksonMessageConverter < 를 사용하여 객체를 JSON으로, JSON을 객체로 자동 Wrapping 해준다.
*/
// 예를 들어 아래와 같은 클래스가 있다고 치자
public class Student {
private int id;
private String name;
private int age;
private Date regDate;
}
// 이는 아래의 코드에서
@RequestMapping(value = "/student", method = RequestMethod.GET)
public Student getStudent(){
Student student = new Student();
student.setId(1);
student.setName("Gompang");
student.setAge(20);
student.setRegDate(new Date());
return student;
}
// 이렇게 사용하면 받는 측에서는 Student 라는 클래스가 JSON으로 Wrapping된 결과를 받을 수 있다.
{
"id": 1,
"name": "Gompang",
"age": 20,
"regDate": "Thu Mar 23 23:07:11 KST 2017"
}
// 이는 클라이언트(브라우저, AJAX) 와 Spring Controller 간의 데이터 포맷팅에 있어서 강력한 장점을 가져다 준다.
// 객체를 만들면, Wrapping을 자동으로 해주기 때문에 CustomType을 문제없이 사용할 수 있다.
// 반대로, 위의 객체를 JSON으로 RestController 혹은,
// @RequestBody로 선언하여 Custom 객체로 받게되면, 해당 JSON이 JAVA의 POJO 타입으로 받을 수 있다.
반응형
'Development > Java' 카테고리의 다른 글
[Spring] JSON Object 관련 (0) | 2017.03.26 |
---|---|
[JAVA] ExecutorService 관련 공부 (1) | 2017.03.26 |
[JAVA / 네트워크] 비동기 통신 프로그램 샘플 (3) | 2016.06.12 |
[JAVA / 네트워크] 멀티룸 구조에 대하여(게임&채팅 방 여러개) (44) | 2016.05.22 |
[JAVA / 네트워크] 간단한 통신 메세지 프로토콜 구성하기 (6) | 2016.04.28 |