
그동안의 기능을 구현한 과정을 보면 자세한 부분에 있어서는 이제는 이해가 될 것이다.
- 컨트롤러
- id 값과 받은 정보를 받은 dto를 soccerteamService 로 보내주고 해당 서비스에서 요리(데이터 처리)를 해주면 된다.
@PatchMapping("/api/soccer-team/{id}")
public ResponseEntity<Team> createSoccer(@PathVariable Long id, @RequestBody SoccerteamDto dto){
Team updated = soccerteamService.updateSoccerTeam(id, dto);
//수정이 잘 되었는가?
return (updated != null) ?
ResponseEntity.status(HttpStatus.OK).body(updated):
ResponseEntity.status(HttpStatus.BAD_REQUEST).build();
}
- 서비스
- 클라이언트에서 수정 요청한 id와 데이터를 이용해 id 일치 확인 후 변경해준다!
public Team updateSoccerTeam(Long id, SoccerteamDto dto) { // 1. 엔티티 변환하고 파라미터로 받아온 id 값에 해당하는 엔티티 가져오기 Team team = dto.toEntity(); // toEntity메서드는 이전 글 생성 기능 글에서 확인. Team target = soccerteamRepository.findById(id).orElse(null); // 2. 파라미터로 받아온 id값과 엔티티의 id값과 다르거나, 조회한 id의 정보가 없다면 null 반환 if (team.getId() != id || target.getId() == null) return null; // 3. 같다면 업데이트 target.patch(team); // 4. 업데이트 된 정보 저장 Team update = soccerteamRepository.save(target); return update; }
- 근데 여기서 저 patch 메서드가 궁금할 것이다. 바로 수정요청한 데이터로 수정하기 위해 생성한 Team 엔티티 클래스 내에서 생성한 메서드이다.
@Entity @AllArgsConstructor @NoArgsConstructor @Getter public class Team { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column private String teamname; @Column private String league; /*클라이언트에서 바꾸고 싶어하는 데이터가 null 값이 아니라면 기존의 데이터로 바꿔달라는 뜻 만약 저 if문 없이 this.teamname = team.teamname; 으로 한다면, teamname 또는 league 하나의 데이터만 바꿀 경우 바꾸지 않은 데이터는 null값이 되어버린다. */ public void patch(Team team) { if (team.teamname != null) this.teamname = team.teamname; if (team.league != null) this.league = team.league; } }

이렇게 기존 팀이 있었다면 수정을 하고

확인을 해보면

올바르게 바뀐 것을 확인할 수 있다.

h2 DB에서도 확인할 수 있다. h2 db 연결은 나중에 포스팅할 예정이다.
'스프링 > 축구 팀 CRUD' 카테고리의 다른 글
SpringBoot 축구 팀 CRUD 초초초미니 프로젝트 - 축구팀 삭제기능 구현 (0) | 2024.04.22 |
---|---|
SpringBoot 축구 팀 CRUD 초초초미니 프로젝트 - 축구팀 생성 구현 (1) | 2024.04.22 |
SpringBoot 축구 팀 CRUD 초초초미니 프로젝트 - Service 추가 (0) | 2024.04.22 |
SpringBoot 축구 팀 CRUD 초초초미니 프로젝트 - 팀 리스트 조회, 단일 팀 조회 (4) | 2024.03.17 |