Notice
Recent Posts
Recent Comments
Link
250x250
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |
Tags
- 리액트세팅
- javaspring
- 마이바티스
- Spring Boot
- HTML
- CSS
- react
- 자바
- 기초 코딩
- Javascript
- 웹
- 구글캘린더api
- 자바스크립트
- 전자정부 서버세팅
- mybatis
- 자바스크립트기초문법
- springboot
- 자바스크립트 기초
- java
- 웹앱
- 코딩
- spring
- 리액트초기세팅
- 처음만나는자바스크립트
- 기초코딩
- 스프링부트
- 자바스크립트기초
- 리액트프로젝트세팅
- 구글 oauth
- js
Archives
- Today
- Total
인생 디벨로퍼
@RequestBody 에 관하여... 본문
728x90
@RequestBody
Spring 프레임워크에서 제공하는 어노테이션.
HTTP 요청 body 에 포함된 데이터를 자바 객체로 변환하는 역활을 함.
더보기
HTTP (GET / POST 요청)
GET 요청 - URL 뒤에 파라미터를 붙여 데이터를 전달
POST 요청 - 본문에 데이터를 포함시켜 전달 (body를 가짐)
Ajax는 JavaScript를 사용하여 HTTP 요청을 비동기적으로 보내고, 서버로부터 응답을 받아 처리한다.
이 때 @RequestBody 어노테이션을 사용하여 요청 본문에 포함된 데이터를 자바 객체로 변환하여 서버에서 처리한다.
문제상황 : 이력서 등록 (insert) 에서 다수의 DTO 생성.
각 요소별로 테이블이 다르기 때문에, Dto 를 만들어 insert 하려 했다.
음,,, 그런데 @RequestBody 는 하나만 쓸수 있다....고 한다.
@PostMapping("/resume/save")
public @ResponseBody ResponseEntity<?> resumeSave(@RequestBody ResumeSaveDto resumeSaveDto,
ResumeGraduateSaveDto resumeGraduateSaveDto,
ResumeCareerSaveDto resumeCareerSaveDto,
ResumeLicenseSaveDto resumeLicenseSaveDto,
ResumeStackSaveDto resumeStackSaveDto) {
Employee principal = MySession.MyPrincipal(session);
if (principal == null) {
throw new CustomApiException("인증이 되지 않았습니다", HttpStatus.UNAUTHORIZED);
}
resumeService.이력서등록(resumeSaveDto, resumeGraduateSaveDto, resumeCareerSaveDto, resumeLicenseSaveDto,
resumeStackSaveDto, principal.getId());
return new ResponseEntity<>(new ResponseDto<>(1, "이력서 등록 성공", resumeSaveDto.getId()), HttpStatus.OK);
}
당연히 insert 에 실패
@RequestBody 를 하나만 붙였을때, 실행은 되지만 @RequestBody 를 붙이지 않은 dto 들은 데이터를 받아오지 못한다.
해결 방법
- ajax 대신 form 태그를 사용한다. (이걸 했어야했다...)
- 필요 데이터들을 하나의 Dto 로 만들어, 서비스단에서 나눠준다...
@PostMapping("/resume/save")
public @ResponseBody ResponseEntity<?> resumeSave(@RequestBody ResumeSaveDto resumeSaveDto) {
System.out.println(resumeSaveDto.toString());
Employee principal = (Employee) session.getAttribute("principal");
if (principal == null) {
throw new CustomApiException("인증이 되지 않았습니다", HttpStatus.UNAUTHORIZED);
}
resumeService.이력서등록(resumeSaveDto, principal.getId());
return new ResponseEntity<>(new ResponseDto<>(1, "이력서 등록 성공", resumeSaveDto.getId()), HttpStatus.OK);
}
@Transactional
public void 이력서등록(ResumeSaveDto resumeSaveDto, int employeeId) {
try {
resumeRepository.insert(employeeId, resumeSaveDto);
resumeGraduateRepository.insert(resumeSaveDto.getId(), resumeSaveDto.getSchoolId(),
resumeSaveDto.getSchoolGraduate());
resumeCareerRepository.insert(resumeSaveDto.getId(), resumeSaveDto.getCareerCompany(),
resumeSaveDto.getCareerStart(), resumeSaveDto.getCareerEnd());
resumeLicenseRepository.insert(resumeSaveDto.getId(), resumeSaveDto.getLicenseId(),
resumeSaveDto.getLicenseIssuer());
resumeStackRepository.insert(resumeSaveDto.getId(), resumeSaveDto.getStackId(),
resumeSaveDto.getStackAcquisition());
} catch (Exception e) {
throw new CustomApiException("이력서 등록 실패", HttpStatus.INTERNAL_SERVER_ERROR);
}
}
insert 에 성공했으나, 썩 유쾌하진 않았다..
728x90
'Project > Mini Project - Rodonin (구인구직)' 카테고리의 다른 글
이력서 수정 (update) (0) | 2023.03.12 |
---|---|
이력서 등록 (ajax 를 사용한 insert) (0) | 2023.03.12 |
이력서 상세보기 / 네버엔딩 select (0) | 2023.03.08 |
이력서 리스트 만들기 (select, ajax 를 이용한 delete) (0) | 2023.03.08 |
이력서 리스트 만들기 쿼리 / 절대 간단하지 않은 join (0) | 2023.03.07 |