Open snaag opened 1 year ago
@GetMapping("hello-string")
@ResponseBody // view 돌려주지 않고 바로 body 에 요걸 (return) 넣어주면 되갰구나 라고 생각
public String helloString(@RequestParam("name") String name) {
return "hello " + name;
}
@GetMapping("hello-api")
@ResponseBody
public Hello helloApi(@RequestParam("name") String name) {
Hello hello = new Hello();
hello.setName(name);
return hello;
}
static class Hello {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
@ResponseBody 를 사용
HttpMessageConverter
가 동작StringHttpMessageConverter
MappingJackson2HttpMessageConverter
슥 읽기 좋은 내용 https://jaimemin.tistory.com/1823
package hello.hellospring.domain;
public class Member {
private Long id;
private String name;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
도메인 -> DB 에 들어갈 데이터(Member) 의 객체
package hello.hellospring.repository;
import hello.hellospring.domain.Member;
import java.util.List;
import java.util.Optional;
public interface MemberRepository {
Member save(Member member);
Optional<Member> findById(Long id);
Optional<Member> findByName(String name);
List<Member> findAll();
}
package hello.hellospring.repository;
import java.util.*;
import hello.hellospring.domain.Member;
public class MemoryMemberRepository implements MemberRepository {
/**
* 동시성 문제가 고려되어 있지 않음, 실무에서는 ConcurrentHashMap, AtomicLong 사용 고려
*/
private static Map<Long, Member> store = new HashMap<>();
private static long sequence = 0L;
@Override
public Member save(Member member) {
member.setId(++sequence);
store.put(member.getId(), member);
return member;
}
@Override
public Optional<Member> findById(Long id) {
// 이렇게 감싸면... null 을 반환했을 때, 클라이언트에서 뭔가 할 수 있다고 함
return Optional.ofNullable(store.get(id));
}
@Override
public Optional<Member> findByName(String name) {
return store.values().stream()
.filter(member -> member.getName().equals(name)) // 이게 람다
.findAny();
}
@Override
public List<Member> findAll() {
return new ArrayList<>(store.values());
}
}
리포지토리 -> 데이터베이스에 접근하는 객체, 따라서 도메인 객체를 DB 에 저장 및 관리함