Spring-JSP

[Spring-JSP] Rest API 사용하기

Jeong Jeon
반응형

@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); 
	}

 

대충 적어놨던것들 다시 옮기는중...!

반응형