1. Spring
- 로그인 기능은 없는 CRUD 가능한 게시판을 만드는 것이 개인과제로 주어져서, 아는 지식을 활용해 바로 만들기부터 시작했다
- 일단은 리포지토리를 내장된 해시맵을 활용해 최대한 객체지향적으로 만들고 작동하는 것을 확인한 후 최종적으로 Mysql로 갈아끼울 계획을 세웠다
- ui없이 api 테스트기를 통해 json형태로만 데이터를 주고받는 것이기 때문에 API에 모두 @Responsebody를 붙혔으며, id값으로 동적 라우팅을 구현하기 위해 메소드 매개변수에 @PathVariable 설정과, POST 요청 시 http body로 전송된 데이터를 받기위해 메소드 매개변수에 @RequestBody를 붙혀줬다
- 컨트롤러 관련한 것은 구글링으로 많이 알 수 있었다
@GetMapping()
@ResponseBody
public List<MemoryBoardRepository.CreatedData> getAllPosts() {
return boardService.getAllPosts();
}
@GetMapping("/{id}")
@ResponseBody
public MemoryBoardRepository.CreatedData getPost(@PathVariable int id) {
return boardService.getPost(id);
}
@PostMapping()
@ResponseBody
public MemoryBoardRepository.CreatedData writePost(@RequestBody Article article) {
id++;
return boardService.post(article, id);
}
- 포스팅을 할 때마다 1씩 증가하는 id값을 부여해주었고, JSON으로 응답함을 알려주는 @RestController를 컨트롤러에 붙히고 @RequestMapping 설정으로 코드 중복을 줄였다
- 스프링 빈 등록과 의존성 주입까지 자동으로하는 방식으로 구현해보았다
@RestController
@RequestMapping(value = "/post")
public class BoardController {
BoardService boardService;
@Autowired
public BoardController(BoardService boardService) {
this.boardService = boardService;
}
private int id = 0;
- 컨트롤러, 서비스, 리포지토리가 서로 어떻게 연동되고 데이터가 어떻게 넘어가는지 김영한님의 강의 때 작성한 코드를 계속 참고하면서 결과적으로는 감을 잡은 것 같다
- 중간에 오랜 시간 원하는대로 너무 안돼서 스트레스를 꽤 받긴했다
- 디버깅1
// cannot deserialize from object value (no delegate- or property-based creator)
// 도메인인 Article 클래스에 내가 만든 생성자가 있었는데, 기본 생성자를 추가하니 해결
public Article() {
}
- 디버깅2
// SpringBoot No serializer found for class ...
// 리포지토리에서 필요한 내용을 추가해 가공한 데이터를 무슨 이유인지 잘 탐지하지 못하는 것 같다
// 아래 어노테이션을 붙혀주니 해결
@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY)
static class CreatedData {
둘다 해결은 된 것 같은데, 원인과 해결된 이유에 대해서도 나중에 좀 더 알아봐야 할 것 같다
'이노베이션 캠프' 카테고리의 다른 글
[WIL] 2주차 (0) | 2022.08.14 |
---|---|
[TIL] 13일차 (0) | 2022.08.13 |
[TIL] 11일차 (0) | 2022.08.12 |
[TIL] 10일차 (0) | 2022.08.11 |
[TIL] 9일차 (0) | 2022.08.10 |