본문 바로가기
SpringBoot

[Spring Boot] 13. REST API (3) - PUT/DELETE method

by 청양호박이 2019. 11. 30.

이제 REST API의 마지막인 PUT과 DELETE method를 구현해보겠습니다. 이정도만 알게되면 나도 이제 API를 만들어서 배포가 가능하게 됩니다. 물론 POST만 사용해도 모든것을 구현할 수 있고... GET만 사용해도 모든것을 구현할 수 있지 않겠습니까?? 하지만 RESTful 로 하는것이 목적이니 나머지도 찬찬히 알아보겠습니다.

 

기존 관련 API method는 아래 2가지를 참조하시면 됩니다.

2019/11/24 - [SpringBoot] - [Spring Boot] 11. REST API (1) - 개요 및 GET method

 

[Spring Boot] 11. REST API (1) - 개요 및 GET method

REST란 무엇이고, 어떻게 사용하는 거에요?? 아무것도 모르겠어요... ㅠㅠ 당연하다... 개발을 접하고 이것을 처음 접하는 사람은 그야말로 혼돈의 카오스에 사로잡힐 것입니다. 그래서 아주 간단하게 이해하기 쉽..

ayoteralab.tistory.com

2019/11/27 - [SpringBoot] - [Spring Boot] 12. REST API (2) - POST method

 

[Spring Boot] 12. REST API (2) - POST method

지난번에 이어서, 이번에는 POST method에 대해서 알아보겠습니다. 이전 내용은 아래 링크로 확인해주세요. 2019/11/24 - [SpringBoot] - [Spring Boot] 11. REST API (1) - 개요 및 GET method [Spring Boot] 11...

ayoteralab.tistory.com

 

그럼 시작해 볼까요??

 

 

4. PUT - /URI/{id}


PUT은 다시 말씀드리지만, Update를 위한 method입니다. 그렇다면 어떤어떤 인자가 필요할까요?? 

(1) 바꿀대상 (2) 바꿀정보... 이렇게 2가지 가 필요할 것 입니다. 바꿀대상은 {id}에 path parameter로 넣어주고, 바꿀정보는 POST에 넣는 것 처럼 HTTP body에 넣어서 request해줍니다.

 

그렇게되면... Controller에는 기존에 GET method에 봤던 것과 동일한 주소로... 기능만 Request.PUT만 달라진 Mapping이 생성되게 됩니다.

 

[Controller.java]

@ApiOperation(httpMethod = "PUT"
			,value = "Station Mise 항목 변경"
			,notes = "Update Station Mise"
			,response = UserDTO.class
			,responseContainer = "Integer")
	@RequestMapping(value = "/stationMise/{stationName}", method = RequestMethod.PUT)
	public ResponseEntity<?> updateStationMise(
			@ApiParam(value = "StationMiseDTO", required = true) @RequestBody StationMiseDTO smDTO,
			@ApiParam(value = "stationName", required = true) @PathVariable("stationName") String stationName){
		L.info("Update Station Mise");		
		return ResponseEntity.ok(userService.updateStationMise(smDTO, stationName));
	}

위에 언급한대로.... @ResquestBody, @PathVariable 이렇게 2가지 annotation이 추가됩니다. 대신 경로는 기존 GET과 아주 동일하네요~ 나머지 Service와 mapper.java는 동일합니다.

 

[Service.java]

	public Integer updateStationMise(StationMiseDTO smDTO, String stationName) {
		return userMapper.updateStationMise(smDTO, stationName);
	}

[Mapper.java]

	Integer updateStationMise(@Param("mydto") StationMiseDTO smDTO, String stationName);

 

mapper.xml은 parameterType이 2가지가 오기때문에... 그냥 default인자를 하나 넣어줍니다. 그외에는 동일하네요~

 

[Mapper.xml]

<update id="updateStationMise" parameterType="java.lang.String">
<![CDATA[
	UPDATE STATION_MISE
	SET PM10_VALUE = #{mydto.pm10Value}, PM25_VALUE = #{mydto.pm25Value}
	WHERE STATION_NAME = #{stationName}
]]>
</update>

 

그럼 기존에 계속 사용했던 table을 한번 update해보겠습니다. 

 

[결과]

어라 STATION_NAME = han river인 아이의 PM10과 PM25값이 각각 변경이 되었습니다. 그럼 Postman을 통해서 어떻게 값을 넣었길래 이렇게 되었을까요??

 

맞습니다. method는 PUT으로 지정하고... URL에는 stationMise/han river 로 path variable을 추가했고... body에는 다음과 같이 json 타입으로 변경할 값을 지정했습니다. Return은 1이 왔으니... 1개의 행이 잘 변경됬다는 것이지요...!!! 그렇다면 0이 왔다는건... 안됬다는 거겠죠??ㅎㅎ

 

 

5. DELETE - /URI/{id}


마지막으로 해당 항목을 삭제하는 method를 구현해 보겠습니다. 

이제 어떻게 되는지 구조가 머리속으로 그려지시나요?? 이 아이도 결국 GET, PUT과 동일한 URI를 가집니다. 하지만 method가 다를 뿐이지요. 그리고 body에는 추가할게 없으므로 annotation도 @PathVariable로 한가지 입니다. 그럼 소스를 한번 살펴보겠습니다.

 

[Controller.java]

	@ApiOperation(httpMethod = "DELETE"
			,value = "Station Mise 항목 변경"
			,notes = "Update Station Mise"
			,response = UserDTO.class
			,responseContainer = "Integer")
	@RequestMapping(value = "/stationMise/{stationName}", method = RequestMethod.DELETE)
	public ResponseEntity<?> deleteStationMise(
			@ApiParam(value = "stationName", required = true) @PathVariable("stationName") String stationName){
		L.info("Update Station Mise");		
		return ResponseEntity.ok(userService.deleteStationMise(stationName));
	}

[Service.java]

	public Integer deleteStationMise(String stationName) {
		return userMapper.deleteStationMise(stationName);
	}

[Mapper.java]

	Integer deleteStationMise(String stationName);

[Mapper.xml]

<delete id="deleteStationMise" parameterType="java.lang.String">
<![CDATA[
	DELETE FROM STATION_MISE
	WHERE STATION_NAME = #{stationName}
]]>
</delete>

postman으로 요청은 아래과 같이 하며, 결과는 그아래 처럼 han river의 데이터가 delete되었습니다.

(특이사항으로는 body에는 아무런 정보가 없네요~)

결과....

지금까지 장장 세번으로 나눠서 REST API에 대해서 알아보았습니다. 이게 가장 기본이니 나머지는 필요할때 응용해서 구현하면 되는 거지요~ 그럼 오랜기간동안 고생많으셨습니다!!!

 

-Ayotera Lab-

댓글