1 ๋ถ„ ์†Œ์š”

๐Ÿ“š REST API


๐Ÿ“š @RestController

@RestController ๋ž€

@RestController ๋ž€ @Controller์— @ResponseBody๊ฐ€ ์ถ”๊ฐ€๋œ ๊ฒƒ์ด๋‹ค.
์ฃผ์šฉ๋„๋Š” Json ํ˜•ํƒœ๋กœ ๊ฐ์ฒด ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
์ตœ๊ทผ์— ๋ฐ์ดํ„ฐ๋ฅผ ์‘๋‹ต์œผ๋กœ ์ œ๊ณตํ•˜๋Š” REST API๋ฅผ ๊ฐœ๋ฐœํ•  ๋•Œ ์ฃผ๋กœ ์‚ฌ์šฉํ•˜๋ฉฐ ๊ฐ์ฒด๋ฅผ ResponseEntity๋กœ ๊ฐ์‹ธ์„œ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

@RestController ์˜ˆ์ œ ์ฝ”๋“œ

HttpStatus๋ฅผ ์„ค์ •ํ•ด์ฃผ๊ธฐ ์œ„ํ•ด ResponseEntity๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
ResponseEntity๋Š” Spring Framework์—์„œ ์ œ๊ณตํ•˜๋Š” ํด๋ž˜์Šค ์ค‘ HttpEntity๋ฅผ ์ƒ์†๋ฐ›๋Š”๋‹ค.
HttpEntity๋Š” HTTP ์š”์ฒญ ( request ) ๋˜๋Š” ์‘๋‹ต ( response ) ์— ํ•ด๋‹นํ•˜๋Š” HttpHeader ์™€ HttpBody๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ๋‹ค.
ResponseEntity๋Š” HttpRequest์— ๋Œ€ํ•œ ์‘๋‹ต ๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จํ•˜๋Š” ํด๋ž˜์Šค์ด๋‹ค.
๋”ฐ๋ผ์„œ HttpStatus, HttpHeaders, HttpBody๋ฅผ ํฌํ•จํ•œ๋‹ค.
์ž‘๋™ ๊ฒฐ๊ณผ์— ๋”ฐ๋ผ ์‘๋‹ต์„ ๋ณด๋‚ด์ค˜์„œ ๊ฒฐ๊ณผ๋ฅผ ํ™•์ธํ•˜๋ฉด ๋œ๋‹ค.

import java.util.List;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

import com.ssafy.guestbook.model.MemberDto;
import com.ssafy.guestbook.model.service.MemberService;

@RestController
// ๋ฐ‘์— ๋‹ค @ResponseBody๋ฅผ ์“ธ๊ฑฐ์—ฌ์„œ RestController ๋ผ๊ณ  ํ•œ๋‹ค
@RequestMapping("/admin")
@CrossOrigin("*")
public class AdminController {

	private static final Logger logger = LoggerFactory.getLogger(AdminController.class);

	@Autowired
	private MemberService memberService;

	// responseEntity -> ์ƒํƒœ์ฝ”๋“œ์™€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ™์ด ๋ฌถ์–ด์„œ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋‹ค. <๋ฐ˜ํ™˜๊ฐ’ ์ž๋ฃŒํ˜•>(๋ฐ˜ํ™˜๊ฐ’, http์ƒํƒœ )
	// HTTPStatus.OK -> ์ •์ƒ์ ์œผ๋กœ ์‹คํ–‰๋๋‹ค
	@GetMapping("/user")
	public ResponseEntity<?> userList() throws Exception {
		List<MemberDto> list = memberService.listMember();

        // ์ •์ƒ์ ์œผ๋กœ list๊ฐ€ ์กด์žฌํ•˜๋ฉด list๋ฅผ ๋ฐ˜ํ™˜ํ•ด์ฃผ๊ณ  ์ƒํƒœ(OK)๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค.
        // ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉด ์ƒํƒœ(NO_CONTENT)๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค.
		if (list != null && !list.isEmpty()) {
			return new ResponseEntity<List<MemberDto>>(list, HttpStatus.OK);
		} else {
			return new ResponseEntity<Void>(HttpStatus.NO_CONTENT);
		}
	}

    // ๋“ฑ๋กํ•˜๊ธฐ
	@PostMapping("/user")
	public ResponseEntity<?> userRegister(@RequestBody MemberDto memberDto) throws Exception {
		memberService.registerMember(memberDto);
        // listMember ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  ์ƒํƒœ(OK)๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค.
		return new ResponseEntity<List<MemberDto>>(memberService.listMember(), HttpStatus.OK);
	}


    // id๋กœ ํšŒ์›์ฐพ๊ธฐ
	@GetMapping("/user/{userid}")
	public ResponseEntity<?> userInfo(@PathVariable("userid") String userid) throws Exception {
		MemberDto memberDto = memberService.getMember(userid);
        // ์ •์ƒ์ ์œผ๋กœ memberDto๊ฐ€ ์กด์žฌํ•˜๋ฉด memberDto๋ฅผ ๋ฐ˜ํ™˜ํ•ด์ฃผ๊ณ  ์ƒํƒœ(OK)๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค.
        // ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉด ์ƒํƒœ(NO_CONTENT)๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค.
		if (memberDto != null) {
			return new ResponseEntity<MemberDto>(memberDto, HttpStatus.OK);
		} else {
			return new ResponseEntity<Void>(HttpStatus.NO_CONTENT);
		}
	}

    // update
	@PutMapping("/user")
	public ResponseEntity<?> userModify(@RequestBody MemberDto memberDto) throws Exception {
		memberService.updateMember(memberDto);
        // listMember ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  ์ƒํƒœ(OK)๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค.
		return new ResponseEntity<List<MemberDto>>(memberService.listMember(), HttpStatus.OK);
	}

    // delete
	@DeleteMapping("/user/{userid}")
	public ResponseEntity<?> userDelete(@PathVariable("userid") String userid) throws Exception {
		memberService.deleteMember(userid);
        // listMember ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  ์ƒํƒœ(OK)๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค.
		return new ResponseEntity<List<MemberDto>>(memberService.listMember(), HttpStatus.OK);
	}
}