날아라쩡글이의 블로그입니다.
RestController 본문
728x90
반응형
AJAX처리를 위해 RestController설정방법과 자바객체를 json텍스트로, json형식의 텍스트를 자바객체로 변환시키는 라이브러리 의존성 추가
maven에서 jackson을 검색하고 databind의 의존성을 추가한다.
- <dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.13.1</version>
</dependency> - 방법이 2가지가 존재한다.
- 첫번째는 restController의 패키기지를 만들어서 @RestController어노테이션을 붙이고 @RequestMapping("/rest/book")으로 경로를 설정하는 방법이 있다.
- 두번째는 일반 @Controller의 어노테이션을 붙이고 return의 객체 앞에 @ResponseType을 붙이고 작성하는 방법이다.
- 요청핸들러 메소드가 반환하는 값을 응답메소지의 body에 포함시킨다.
- jackson-databind 라이브러리가 프로젝트에 포함되어 있으면 요청핸들러 메소드가 반환하는 값을 json형식의 텍스트로 변환한 다음 응답메세지의 body부에 포함시켜서 클라이언트로 보낸다.
- @RestController를 사용하는 대신 아래와 같이 적어도 동일하게 동작한다.
- @Controller //@RestController 대신 @Controller를 적었다.
@RequestMapping("/rest/book")
public class BookRestController{
@Autowired
BookService bookservice;
@GetMapping("/detail.do")
public @ResponseBody Book detail(int no) { //@ResponseBody이렇게 반환타입 앞에 어노테이션을 붙여야한다.
Book book = bookService.getBookDetail(no);
return book;
} - @GetMapping("/detail.do")
@ResponseBody //요청핸들러 메소드에 붙인다.
public Book detail(int no) { //@ResponseBody이렇게 반환타입 앞에 어노테이션을 붙여야한다.
Book book = bookService.getBookDetail(no);
return book;
}
//응답객체에 정보를 보내는 방법이다. - 어노테이션이나 restController라고 따로 지정하지 않으면 book/detail.jsp를 찾는다. Book을 반환하는 것이 아닌 경로로 인식해서 jsp페이지를 찾아간다.
- @RestController
@RequestMapping("/rest/book")
public class BookRestController {
@Autowired
private BookService bookService;
@GetMapping("/detail.do")
public Book detail(int no) {
//restController는 반환값이 객체를 보내주기 때문에 String이 아닌 객체의 이름을 붙인다.
//요청할 때 rest/book.do?no=로 받나오면 된다.
//객체를 JSON으로 변환해주는 라이브러리가 필요하다.
Book book = bookService.getBookDetail(no);
return book; //그정보를 그대로 보내준다. 값이 들어있는 객체를 전달하면 끝이다.
} - 이제 modal창으로 값을 표현할 예정이기 때문에 JSON의 형태로 값을 주면 된다.
- 이벤트 핸들러 함수를 이용한다.
- $(function(){
//지정된 모달을 생성한다.
var bookInfoModal = new bootstrap.Modal(document.getElementById('modal-info-book'), {
keyboard: false
});
//장바구니 테이블안에 있는 a태그를 선택한 경우 실행된 이벤트 핸들러함수를 등록한다.
$("#table-cart-items a").click(function(){
event.preventDefault();//a태그에서 클릭이벤트가 발생하면 링크된 페이지로 이동하는 기본동작이 일어나지 않게 한다.
//지금 이벤트가 발생한 그 엘리먼트의 data-book-no 속성값을 조회한다.
var bookNo = $(this).attr("data-book-no");
//JSON을 획득하기 위한 메소드를 사용하고, no를 전달한다.
//아래의 요청은 "http://localhost/rest/book/detail.do?no=100"와 같은 형태의 요청을 서버로 보낸다.
//서버로부터 성공적인 응답이 오면 function(응답데이터){...} 함수가 실행된다.
//jQuery는 서버로부터 성공적인 응답이 오면 응답컨텐츠(json형식의 텍스트)를 자바스크립트 객체나 배열로 변환한 다음, 함수를 실행할 때 전달한다.
$.getJSON('/rest/book/detail.do',{no:bookNo},function(book){ //아이디가 길면 충돌이 덜 일어난다.
//응답으로 받은 책정보를 모달창 테이블의 각 칸에 표시한다.
$("#span-book-created-date").text(book.createdDate);
$("#span-book-updated-date").text(book.updatedDate || '');//null이면 뒤의 값이 표시된다.
$("#span-book-title").text(book.title);
$("#span-book-author").text(book.author);
$("#span-book-publisher").text(book.publisher);
$("#span-book-price").text(book.price.toLocaleString());
$("#span-book-discountPrice").text(book.discountPrice.toLocaleString());
$("#span-book-pub-date").text(book.pubDate);
$("#span-book-stock").text(book.stock.toLocaleString());
//모달을 화면에 표시한다.
bookInfoModal.show();
})
});
});- JSON으로 날짜형식을 보낼때 vo객체에
- @JsonFormat(pattern = "yyyy년 M월 d일")
private Date pubDate;
private int stock;
@JsonFormat(pattern = "yyyy년 M월 d일")
private Date updatedDate;
@JsonFormat(pattern = "yyyy년 M월 d일") - 설정을하면 유니코드가 아닌 이 형식으로 올라간다.
- Rest(Representational State Transfer)
- 자원을 이름(자원의 표현, URL)으로 구분하여 해당 자원 상태(정보)를 주고 받는 것
- HTTP URL을 사용해서 자원의 이름을 명시하고, HTTP Method를 사용해서 해당 자원에 대한 작업을 지정하는 것이다.
- @Controller //@RestController 대신 @Controller를 적었다.
반응형
'중앙 HTA (2106기) story > spring java framwork story' 카테고리의 다른 글
RestController , 정형화된 응답 (0) | 2022.01.07 |
---|---|
$(function(){스크립트 코딩}) 스크립트안에 적는 코딩 (0) | 2022.01.06 |
spring MVC가 jsp에서 실행되는 순서와 객체들 (0) | 2022.01.05 |
Session어노테이션 & SessionUtils로 객체 담기 (0) | 2022.01.05 |
다이나믹쿼리 (resultMap) (0) | 2022.01.04 |
Comments