study/templete.hmtl 만들기
google font 추가 https://fonts.google.com/?subset=korean
<link href="https://fonts.googleapis.com/css?family=Noto+Sans+KR:300,400,500&display=swap" rel="stylesheet">
css는 읽는 순서에 따라 달라진다. 내가 정의한 것을 가장 아래쪽에 넣었다. 의도적으로 힌 것이다. 제가 정의하는 쪽에서 다 오버라이딩 할 수 있도록! font-family를 적절하게 바꿔줄 수 있음. 부트스트랩에 있는 폰트를 재정의해서 사용할 수도 있다.
@PostMapping("/new-study")
public String newStudySubmit(@CurrentAccount Account account, @Valid StudyForm studyForm, Errors errors) { // 검증한 에러를 받아줌
if (errors.hasErrors()) { //애러가 있으면 study/form을 다시 보여줌
return "study/form";
}
Study newStudy = studyService.createNewStudy(modelMapper.map(studyForm, Study.class), account); // studyForm에서 study로 데이터를 옮겨야 한다.
return "redirect:/study/" + URLEncoder.encode(newStudy.getPath(), StandardCharsets.UTF_8);
}
studyform에 있는 data를Study 타입의 인스턴스를 만들어서 옮겨주면 된다. 그 다음에 account를 manager로 추가해야 한다.
study path 가 한글을 쓸 수 있다. 따라서 url 인코딩을 사용해야 한다.
StudyForm을 검증해야 한다. (title은 중복을 허용하기로 함, path만 확인하면 된다. )
service에서는 readonly를 주지 않을 것이다. 왜? 뭔가 데이터를 변경하는 작업을 서비스에 위임해서 트랜잭션 안에서 처리하기로 약속했기 때문!
@InitBinder: studyForm 을 받을 때 webDataBinder 타입을 받을 수 있고 webDataBinder 에다가 validators로 studyFormValidator를 추가해주면 , study를 추가할 때 path값이 중복되는지 확인을 할 것이다.
@InitBinder("studyForm")
public void studyFormInitBinder(WebDataBinder webDataBinder) {
webDataBinder.addValidators(studyFormValidator);
}
출처 : 인프런 백기선님의 스프링과 JPA 기반 웹 애플리케이션 개발