study/backend
[TIL] 07 @RequestMapping, @Builder
SHplusR
2023. 6. 19. 00:45
@RequestMapping
나는 주로 Controller에서 url을 묶을 때 사용한다.
예를 들어
SampleController
@Controller
@RequestMapping("/sample")
@Log4j2
public class SampleController {
@GetMapping("/ex1")
public void ex1(){
log.info("ex1.....");
}
}
만약 내가 ex1의 페이지를 호출하고싶다면
localhost:8080/sample/ex1 을 호출하면 된다.
다만 이 경우에는 ex1.html이 꼭 templates의 sample패키지에 존재해야한다.
(존재하지 않으면 찾지 못해 에러뜬다)
다른 일부 프로젝트에서는 ex1()의 반환값을 String으로하여
@GetMapping("/ex1")
public String ex1(){
log.info("ex1.....");
return "ex1";
}
이렇게도 하던데, 이렇게 하면 ex1.html이 templates의 어느 패키지에 있던 찾아서 화면을 불러줄수있다.
@Builder는 객체를 생성할때 사용하는 어노테이션이다.
만약 @Builder이 없을 경우, dto->entity 변환하는 작업이 있다고 했을때 아래와 같이 작성하게된다.
public static BoardEntity toSaveEntity(BoardDTO boardDTO){
System.out.println("boardentity : tosaveentity");
BoardEntity boardEntity = new BoardEntity();
boardEntity.setBoardWriter(boardDTO.getBoardWriter());
boardEntity.setBoardPass(boardDTO.getBoardPass());
boardEntity.setBoardTitle(boardDTO.getBoardTitle());
boardEntity.setBoardContents(boardDTO.getBoardContents());
boardEntity.setBoardHits(0);
boardEntity.setFileAttached(0);
return boardEntity;
}
어쨌든 set을 하는건 똑같은데 column하나씩 설정을해야하고... 빌더패턴에도 맞지않다.
@Builder를 쓰면 아래와 같이 작성하면 된다.
default Board dtoToEntity(BoardDTO dto){
Member member = Member.builder().email(dto.getWriterEmail()).build();
Board board = Board.builder()
.bno(dto.getBno())
.title(dto.getTitle())
.content(dto.getContent())
.writer(member)
.build();
return board;
}
훨씬 간단하고 가독성도 좋다!