@Controller와 @RestController 차이 한번 보고 넘어가자
-
차이점
-
HTTP Response Body가 생성되는 방식의 차이.
-
@Controller는 View 기술을 사용
-
Client -> Request -> Dispatcher Servlet -> Handler Mapping -> Controller -> View -> Dispatcher Servlet -> Response -> Client
-
@RestController는 객체를 반환할때 객체 데이터는 바로 JSON/XML 타입의 HTTP 응답을 직접 리턴
-
Client -> HTTP Request -> Dispatcher Servlet -> Handler Mapping -> RestController (자동 ResponseBody 추가)-> HTTP Response -> Client
-
직접적으로 Http Status를 핸들링할수 있어 상태코드와 데이터를 한번에 요리해서 보낼 수 있다.
-
**@Controller의 메서드에 @ResponseBody를 선언해서 객체를 리턴하는것과 비슷하다고 생각하면 된다.
1). Controller.java 예제
-
다음과 같이 RestApi Controller GET/POST/PUT/DELETE의 예제를 볼수 있다.
-
통상 4가지가 있지만, 물리삭제를 사용하지 않는 경우가 많아 DELETE는 잘 사용되지 않는다.
-
Path는 명사위주로 사용하며, Restful한 Api 규칙을 찾아서 사용하길 바란다.
/*API 샘플 GET*/
@GetMapping(path = "/test/{test}", produces=MediaType.APPLICATION_JSON_UTF8_VALUE)
public ResponseEntity<RestResultVo> getTest(HttpServletRequest req, @PathVariable String test) throws Exception{
System.out.println(test);
System.out.println(req.getHeader("test"));
System.out.println(req.getParameter("AAA"));
/* 테스트 155 111111111111111111111111111111111114444*/
return new ResponseEntity<RestResultVo>(new RestResultVo(),HttpStatus.OK);
}
/*API 샘플 POST*/
@PostMapping(path = "/test", consumes=MediaType.APPLICATION_JSON_UTF8_VALUE, produces=MediaType.APPLICATION_JSON_UTF8_VALUE)
public ResponseEntity<RestResultVo> postTest(HttpServletRequest req, @RequestBody RestRequestBodyVo restRequestBodyVo) throws Exception{
System.out.println(req.getHeader("test"));
System.out.println(restRequestBodyVo.getCompanyId());
return new ResponseEntity<RestResultVo>(new RestResultVo(),HttpStatus.OK);
}
/*API 샘플 PUT*/
@PutMapping(path = "/test", consumes=MediaType.APPLICATION_JSON_UTF8_VALUE, produces=MediaType.APPLICATION_JSON_UTF8_VALUE)
public ResponseEntity<RestResultVo> putTest(HttpServletRequest req, @RequestBody RestRequestBodyVo restRequestBodyVo) throws Exception{
System.out.println(req.getHeader("test"));
System.out.println(restRequestBodyVo.getCompanyId());
return new ResponseEntity<RestResultVo>(new RestResultVo(),HttpStatus.OK);
}
/*API 샘플 DELETE*/
@DeleteMapping(path = "/test", consumes=MediaType.APPLICATION_JSON_UTF8_VALUE, produces=MediaType.APPLICATION_JSON_UTF8_VALUE)
public ResponseEntity<RestResultVo> deleteTest(HttpServletRequest req, @RequestBody RestRequestBodyVo restRequestBodyVo) throws Exception{
System.out.println(req.getHeader("test"));
System.out.println(restRequestBodyVo.getCompanyId());
return new ResponseEntity<RestResultVo>(new RestResultVo(),HttpStatus.OK);
}
2). ServiceImpl.java 예제
-
본인은 Android와 통신을 위해 RestApi를 사용하였다. 기기 정보를 보내주도록 하자.
-
간단하게 사용한 예시를 보여주면, 기기리스트를 ResponseEntity를 사용하여 전달하였다.
-
ResponseEntity는 Body Data와 status Code를 파라미터로 전달할 수 있도록 도와준다.
public ResponseEntity<String> getClientInfo(HttpServletRequest req, RestDeviceVo restDeviceVo) throws Exception {
ArrayList<RestDeviceVo> resultList = restApiDao.selectDeviceInfo(restDeviceVo);
Gson gson = new Gson();
String jsonPlace = gson.toJson(resultList);
return new ResponseEntity<String>(jsonPlace,HttpStatus.OK);
}
대충 적어놨던것들 다시 옮기는중...!
'Spring-JSP' 카테고리의 다른 글
[Spring-JSP] Custom Annotation을 이용한 AOP 만들기 (0) | 2021.04.15 |
---|---|
[Spring-JSP] Thumbnailator-이미지/jcodec-비디오 업로드시 썸네일 만들고 저장하기 (0) | 2021.04.09 |
[Spring-JSP] 엄청쉬운 Apache Poi Excel 양식다운로드 기능구현 / 테이블 참조 (0) | 2021.02.23 |
[Spring-JSP] 엄청쉬운Poi Excel 업로드 기능 구현 (0) | 2021.02.17 |
[Spring-JSP] Custom Annotation만드는 방법 정리 (0) | 2021.02.09 |