💻본 포스팅은 '스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 - 김영한'님의 강의를 듣고 작성되었습니다.
[회원 관리 객체 생성 & 컨트롤러 생성]
- 본래는 회원 도메인과 회원 레포지토리는 인터페이스로 만드는 것이 좋다.
[Member]
package hello.login.domain.member;
import lombok.Data;
import javax.validation.constraints.NotEmpty;
@Data
public class Member {
private Long id;
@NotEmpty
private String loginId; //로그인 ID
@NotEmpty
private String name;//사용자 이름
@NotEmpty
private String password;
}
[MemberRepository]
package hello.login.domain.member;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Repository;
import java.util.*;
//원래는 인터페이스로 관리하는게 좋음
@Slf4j
@Repository
public class MemberRepository {
private static Map<Long, Member> store = new HashMap<>(); //static 사용
private static long sequence = 0L;
public Member save(Member member){
member.setId(++sequence);
store.put(member.getId(),member);
return member;
}
public Member findById(Long id){
return store.get(id);
}
public Optional<Member> findByLoginId(String loginId){
// List<Member> all = findAll();
// for(Member m : all){
// if(m.getLoginId().equals(loginId)){
// return Optional.of(m);
// }
// }
// return Optional.empty();
//람다로 축약.
return findAll().stream()
.filter(m ->m.getLoginId().equals(loginId))
.findFirst();
}
public List<Member> findAll(){
return new ArrayList<>(store.values());
}
public void clearStore(){
store.clear();
}
}
[람다와 스트림]
- 람다
- 함수를 간단하게 표현한 것이다.
- 스트림
- 데이터 소스를 표준화된 방법으로 다루기 위함
- 요즘은 람다와 스트림을 통해서 표현하는 것이 가능해야 한다니 열심히 ~ 연습해보자!
[회원 컨트롤러]
package hello.login.web.member;
import hello.login.domain.member.Member;
import hello.login.domain.member.MemberRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.validation.Valid;
@Controller
@RequiredArgsConstructor
@RequestMapping("/members")
public class MemberController {
private final MemberRepository memberRepository;
@GetMapping("/add")
public String addForm(@ModelAttribute("member") Member member){
return "members/addMemberForm";
}
@PostMapping("/add")
public String save(@Valid @ModelAttribute Member member, BindingResult result){
if(result.hasErrors()){
return "members/addMemberForm";
}
memberRepository.save(member);
return "redirect:/";
}
}
- 입력 오류가 있으면 그대로 화면에 남아두기 진행
- 성공적으로 회원 가입을 마쳤다면 홈화면으로 이동(홈화면 = 웰컴 페이지 설정 방법은 https://velog.io/@yeomyaloo/%EC%9B%B9%ED%8E%98%EC%9D%B4%EC%A7%80-%EB%A7%8C%EB%93%A4%EA%B8%B0-1.-%EA%B8%B0%EB%B3%B8-%EC%84%A4%EC%A0%95#welcome-page%EB%9E%80)
[검증 애노테이션 @NotNull @NotEmpty @NotBlank]
- @NotNull
- Null 허용 X
- "" 허용 O
- " " 허용 O
- @NotEmpty
- Null 허용 X
- "" 허용 X
- " " 허용 O
- @NotBlank
- Null 허용 X
- "" 허용 X
- " " 허용 X
'Back-End > Spring' 카테고리의 다른 글
[Spring MVC2][로그인 처리] - 쿠키와 세션 (0) | 2022.05.17 |
---|---|
[Spring MVC2][로그인 처리] - 로그인 기능(로그인 서비스 로직) (0) | 2022.05.13 |
[Spring MVC2][로그인 처리] - 디렉토리(directory) 방향 (0) | 2022.05.13 |
[Spring MVC2][검증2(Validation)] - Bean Validation - HTTP 메시지 컨버터 (0) | 2022.05.05 |
[Spring MVC2][검증2(Validation)] - Form 전송 객체 분리 (0) | 2022.05.05 |