초록 스터디 3기 1주차 - 실습

코코코딩을 합시다·2024년 3월 18일
post-thumbnail

MVC Response

@Controller
public class MemberController {

	// /hello 요청 시 resources/templates/hello.html 페이지가
    // 응답할 수 있도록 설정하세요.

    @GetMapping("/hello")
    public String world(@RequestParam (name="name") String name, Model model) {
        model.addAttribute("name",name);
        return "hello";
    }
    
    // /json 요청 시 {"name": "brown", "age": 20} 
    // 응답할 수 있도록 설정하세요.

    @GetMapping("/json")
    @ResponseBody
    public Person json() {
        return new Person("brown", 20);
    }
}
  • 데이터를 요청하는 것이니 GetMapping을 사용한다.

world()

  • 쿼리 스트링으로 전달된 매개변수는 @RequestParam을 활용하여 컨트롤러 메서드의 파라미터로 주입받는다.
  • 컨트롤러 메서드 내에서 뷰로 값을 전달하기 위해서 Model 객체를 활용한다.
  • Model 객체는 파라미터 값을 주입 받고 addAttribute로 값을 뷰로 전달한다.

json()

  • 컨트롤러 메서드의 리턴타입을 '그대로' body에 담아 응답을 하기 위해서는 @ResponseBody를 활용할 수 있다.

CRUD API

@Controller
public class MemberController {

    private final List<Member> members = new ArrayList<>();
    private final AtomicLong index = new AtomicLong(1);

    @PostMapping("/members")
    public ResponseEntity<Void> create(@RequestBody Member member) {
        // TODO: member 정보를 받아서 생성한다.
        Member newMember = Member.toEntity(member, index.getAndIncrement());
        members.add(newMember);
        return ResponseEntity.created(URI.create("/members/" + newMember.getId())).build();
    }

    @GetMapping("/members")
    public ResponseEntity<List<Member>> read() {
        // TODO: 저장된 모든 member 정보를 반환한다.
        return ResponseEntity.ok().body(members);
    }

    @PutMapping("/members/{id}")
    public ResponseEntity<Void> update(@RequestBody Member newmember, @PathVariable Long id) {
        // TODO: member의 수정 정보와 url 상의 id 정보를 받아 member 정보를 수정한다.
        Member member = members.stream()
            .filter(it -> Objects.equals(it.getId(), id))
            .findFirst()
            .orElseThrow(RuntimeException::new);

        member.update(newmember);
        return ResponseEntity.ok().build();
    }

    @DeleteMapping("/members/{id}")
    public ResponseEntity<Void> delete(@PathVariable Long id) {
        // TODO: url 상의 id 정보를 받아 member를 삭제한다.
        Member member = members.stream()
            .filter(it -> Objects.equals(it.getId(), id))
            .findFirst()
            .orElseThrow(RuntimeException::new);

        members.remove(member);

        return ResponseEntity.noContent().build();
    }
}
profile
좋아하는 걸로 밥 벌어먹기

0개의 댓글