/add에 dto사용 질문입니다.
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)
[질문 내용]
새로고침 시 상품이 중복 등록되는 문제는 POST가 멱등하기 때문인 것이 맞나요?
/add에서 @ModelAttribute로 Item 객체를 바로 만들어서 save했는데, 이 경우 Dto를 거쳐서 저장하는 것이 올바른 방법인가요?
@Data
public class ItemDto {
private String itemName;
private Integer price;
private Integer quantity;
}@PostMapping("/add")
public String addItemTest(@ModelAttribute ItemDto itemDto) {
Item item = new Item(itemDto.getItemName(), itemDto.getPrice(), itemDto.getQuantity());
itemRepository.save(item);
return "basic/item";
}dto를 사용하는 방식으로 변경해봤는데, id가 null이라는 예외가 발생했습니다.
org.springframework.expression.spel.SpelEvaluationException: EL1007E: Property or field 'id' cannot be found on null
에러페이지가 나오지만 목록 페이지로 갔을 때 상품은 정상적으로 저장이 되고 있습니다.
controller의 save부분에서 item의 id가 자동으로 생성되고 있는데, 왜 이런 문제가 발생하는지 궁금합니다.
-- 수정 --
@PostMapping("/add")
public String addItemTest(@ModelAttribute ItemDto itemDto) {
Item item = new Item(itemDto.getItemName(), itemDto.getPrice(), itemDto.getQuantity());
itemRepository.save(item);
return "redirect:/basic/items/" + item.getId();
}redirect로 수정하니 3번 문제는 해결되었습니다. 하지만 이전 코드에서 왜 저런 예외가 떴는지는 아직 모르겠습니다.
답변 1
0
안녕하세요. jungbeen님, 공식 서포터즈 y2gcoder입니다.
아닙니다. 만약 POST 요청이 멱등하다면, 동일한 POST 요청을 여러 번 보내도 서버의 상태가 변하지 않아야 합니다. 같은 데이터로 여러 번 요청을 보내도 응답은 같으나 상품은 한 번만 등록되어야 합니다 🙂
말씀하신 대로 DTO를 받아 엔티티로 변환 후 저장하거나, 엔티티를 조회한 후 DTO로 변환해서 응답해주는 방식으로 하는 것이 좋았습니다 🙂
보여주신 부분만 보고 말씀을 드리자면, 수정 전 코드에서는
model객체에id필드가 없는itemDto를 넣어basic/item이라는 뷰와 함께 반환해주고 있습니다./resource/templates/basic/item.html를 많이 고쳐주시지 않았다면 해당 템플릿 파일에서는 모델에서 받아온 객체에서id를 구하는 곳이 있지만, 모델 객체에는id필드가 없기 때문에 말씀해주신 예외가 발생한 것으로 보입니다 🙂 그리고 수정 해주신 코드에서는 저장한 결과를 바탕으로 받은id값을 이용해 리다이렉트로/basic/items/{itemId}엔드포인트를 호출하고 있습니다. 본 챕터를 다시 복습해주시면 리다이렉트로 일어나는 일들에 대해서는 이해하실 수 있으실 거라 생각합니다 🙂
감사합니다.
servlet과 container에 대한 질문입니다
0
25
1
api를 어느 컨트롤러에 작성해야하는지는 어떤 기준으로 해야하나요?
0
64
1
jsp 의존성 수정 요청
0
78
2
요즘 웹 서버가 주로 사용되는 이유는 SPA 구조 때문일까요 ?
0
143
1
save() 메서드 문의
0
67
1
절대 경로로 templates/basic 하위 파일 열면 css 적용 안되는 현상
0
101
1
request-body-json
0
83
2
MVC 패턴의 적용 단위
0
97
1
RequestMapping을 이용한 핸들러, 어댑터
0
119
2
save 후 결과화면
0
89
2
jsp를 이용한 view
0
97
1
application.properties에 debug 추가해도 결과가 똑같습니다.
0
178
1
수업 코드 제공 관련 문의
0
97
2
RequestMappingHandlerAdapter의 Controller 호출 과정
0
100
3
파일 오픈 시
0
70
1
스프링 배치 관련
0
78
1
@RequestParam의 defaultValue가 blank 값도 처리하는 지 여부
0
112
1
postman으로 /request-body-json-v1 호출시 500 error
0
95
1
프론트엔드와 백엔드의 mvc, rest api에 대한 질문
0
79
1
모델의 역할과 계층 분리에 대한 이해 차이 + 추가질문
0
111
1
console log 출력 관련 질문입니다.
0
75
1
애플리케이션이 실행 되지 않습니다 ㅠㅠㅠ
0
139
1
html 변경하는 부분 적용 문제
0
103
1
한글 깨짐
0
76
2





