html에서 DTO에담긴 객체형식이 전송가능할까요?
public class CompanyDTO {
private Long id;
private String name;
private Address address;
@GetMapping("register")
public String companyRegister(Model model) {
model.addAttribute("form", new CompanyDTO());
return "company/register";
}
@PostMapping("register")
public String companyRegister2(CompanyDTO companyDTO) {
companyService.saveCompany(companyDTO);
return "redirect:/company/list";
}
@GetMapping("list")
public String companyList(Model model) {
List<Company> companyList = companyService.findAll();
List<CompanyDTO> companyDTOList = companyService.transDTOList(companyList);
model.addAttribute("company_list", companyDTOList);
return "company/list";
}
<form th:action="@{register}" th:object="${form}" method="post">
<div class="form-group">
<label th:for="name">회사명</label>
<input type="text" th:field="*{name}" class="form-control"
placeholder="이름을 입력하세요">
</div>
<div class="form-group">
<label th:for="city">도시</label>
<input type="text" th:field="*{address.city}" class="form-control"
placeholder="주소를 입력하세요">
</div>
html list(조회부분) > 정상동작합니다
<tr th:each="company : ${company_list}">
<td th:text="${company.id}"></td>
<td th:text="${company.name}"></td>
<td th:text="${company.address.city}"></td>
감사합니다
Answer 2
1
안녕하세요 안준석님. 다음과 같이 샘플 코드 구현하여 테스트 해봤는데 정상 작동 하였습니다.
일단 2가지 확인이 필요할 것으로 보입니다.
1. 폼 데이터가 @PostMapping에서 값을 잘 받아오는지
@PostMapping("register")
public String companyRegister2(CompanyDTO companyDTO) {
companyService.saveCompany(companyDTO);
// companyDTO의 값을 log 혹은 콘솔 출력을 하여 잘 받아 왔는지 확인
return "redirect:/company/list";
}
2. 잘 받아 왔다면 DB까지 가는 과정에서 값의 변경이 있는지
companyService.saveCompany(companyDTO); // 이 saveCompany부터 DB까지 과정에서 값이 제대로 저장되는지 확인





0
답변 고마워요.
PostMapping에서 Address값이 null인것을 확인했고,
올려주신 코드랑 비교하면서 원인을 계속찾다가,
Address클래스에 Getter만 설정해뒀던것을 발견했어요
만들때는 Address도 엔티티안에 속하니 Setter가 없는편이 나을거라 생각해 없앴는데,
Setter가없으니 당연히 값이 안받아와졌던 거네요
이 부분은 AddressDTO를 하나더 추가해서 해결하였어요.
감사합니다.
1
안녕하세요 안준석님!
혹시 input 태그에 name 속성을 줘보시겠어요? 아래처럼요.
<input type="text" name="name" th:field="*{name}" class="form-control" placeholder="이름을 입력하세요">
<input type="text" name="address.city" th:field="*{address.city}" class="form-control" placeholder="주소를 입력하세요">
.
감사합니다.
0
답변감사해요
말씀대로 해보았는데, html에서 나타나는 name과 전송되는 값에는 변화가 없었어요.
아래는 구글 개발자도구로 본 input태그의 name입니다.
@JsonIgnore 이후 Internal Server Error가 발생하지 않습니다.
0
35
2
강의 관련 외 질문입니다.
0
93
2
SpringBoot4 + Hibernate7 모듈 등록 방법 공유
1
114
1
BeanCreationException
0
105
3
Update 후 UpdateMemberResponse 매핑할 때
0
67
1
트랜잭션을 사용 안 할 때 커넥션은 언제 가져오나요?
0
117
2
페이징 + 검색조건 관련해서 질문드립니다.
0
82
1
Query Dsl Q파일 질문입니다.
0
95
1
루트 쿼리라는것은
0
69
1
메서드를 분리하는 기준
0
79
1
findAllWithMemberDelivery 메서드 질문드립니다.
0
129
3
연관관계 매핑을 안 쓸 경우, 사용해야 하는 전략
0
98
2
fetch join과 영속화와 OSIV의 관계
0
104
2
Distinct 사용 전 결과에 대한 의문
0
127
2
레포지토리 계층에서의 트랜잭션에 대한 의문
0
68
1
영속성 컨텍스트 생명주기의 신기한 부분이 있습니다.
0
86
2
dto 필드 속 엔티티 여부
0
73
1
뷰템플릿 사용 시
0
91
2
Result 클래스 관련 질문
0
62
1
@PostConstruct 프록시 관련 질문드립니다
0
93
1
DTO 대신 Form 사용은 안되나요?
0
144
1
OSIV ON 상태일 때
0
103
1
fetch join VS fetch join 페이징 궁금증
0
196
2
양방향 연관관계 알아보는 법?
0
113
1

