몰랐는데 jdbc는 jpa처럼 entity를 자동생성해주지 않아서 테이블을 미리 만들어놓고 시작해야되더라..
자꾸 swagger에서 500 서버연결 오류가 나서 코드도 고쳐보고 했는데 안되길래 찾아보니.. 일단 이게 문제인 듯 했다.
뭐 그 덕에 코드 구조도 싹다 고쳤다. response 단에도 dto만들어주고, controller에서도 ResponseEntity로 값을 반환하도록 고쳤다.
combinedDto를 만들어서 password와 name,content를 같이 받는 경우 / password만 따로 받는 경우를 분리했다.
또한 responseEntity를 사용해 올바른 http코드로 값을 반환하도록 했다. delete의 경우 nocontent()로 204코드를 반환한다.
아무튼 좀 더 restful한 api 설계를 해보았다..
swagger에서도 자꾸 비밀번호 치고 들어가는거 짜증나서 securityConfig 설정 permitall()로 그냥 해줬다.
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http.csrf((csrf) -> csrf.disable());
http.sessionManagement((sessionManagement) ->
sessionManagement.sessionCreationPolicy(SessionCreationPolicy.STATELESS)
);
http.authorizeHttpRequests((authorizeHttpRequests) ->
authorizeHttpRequests
.requestMatchers("/v3/api-docs/**", "/swagger-ui/**").permitAll()
.anyRequest().permitAll()
);
return http.build();
}
bcrypt하나 쓸려다가 이 설정까지 해주게됐다..
똑같이 실행해봤는데 아직 postmapping에서 똑같은 에러가 난다.
json형식도 올바르고 request url도 맞는데 왜지.
logging.level.org.springframework=DEBUG
logging.level.com.schedule=DEBUG
그 전에 작업하던 파일을 복붙한 탓에 logging level에 com.example이 들어가있었다. 지금 폴더명으로 바꿔주었다.
@PostMapping
public ResponseEntity<ScheduleResponseDto> saveSchedule(@RequestBody CombinedRequestDto dto) {
System.out.println(dto);
return ResponseEntity.ok(scheduleService.saveSchedule(dto));
}
public ScheduleResponseDto saveSchedule(CombinedRequestDto dto){
String encodedPassword = passwordEncoder.encode(dto.getPasswordRequestDto().getPassword());
Schedule schedule = ScheduleMapper.toEntity(dto.getScheduleRequestDto(), encodedPassword, UUID.randomUUID());
System.out.println(schedule);
scheduleDao.save(schedule);
return ScheduleMapper.toDto(schedule);
}
그리고 컨트롤러와 서비스단에서 sout을 찍어보았다.
보니까 콘솔은 제대로 찍히는데 uuid자료형이 들어가야 하는 곳에 string이 들어갔다.
여기 이 .toString()이 문젠데,
뭘 골라야 uuid자료형을 담을 수 있을지 몰라서 대충 .toString()으로 처리했던 것 같다..
setObject로 하니까 빨간줄은 사라지길래 이렇게해서 실행해봤다.
이번엔 값이 들어가긴 하는데 id가 null로 나와서 좀 곤란한 상황이다. 어쩔 수 없이 그냥 toString()으로 쓰고, 데이터타입을 varchar(100)으로 바꿔줬다.
근데 string과 varchar(100)으로 바꿔줬음에도 null로 들어가길래 db를 확인해보니
여기에는 또 정상적으로 잘 들어가있다.
그래서 delete를 시도해보았다.
왜 잘 되지? 처리는 204로 정상적으로 잘 되는걸 보니 responseDto단에서 문제가 있는 듯 했다.
알고보니 mapper쪽에서 id를 처리하지 않고 있었고..
추가해주었다.
이제 정상적으로 잘 출력된다.
필수과제 끝!
'개인 공부용 프로젝트 > schedule.jdbc.api' 카테고리의 다른 글
(도전과제 시작) author 테이블 만들기, custom exception 추가 (0) | 2024.12.05 |
---|---|
Lv1, Lv2 (0) | 2024.12.04 |
일정 관리 앱 프로젝트 시작 (0) | 2024.12.04 |