개발자의 오르막
[Spring Boot + JPA ] DomainClassConvert, Pageable 본문
# Store domain
@Getter
@Setter
@Entity
@Table(name = "tb_store")
@EqualsAndHashCode(of="storeNum")
@ToString(exclude="user")
public class Store {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long storeNum;
private String storeName;
private String storePhone;
private String storeAddress1;
private String storeAddress2;
private String businessTime;
private String storeHoliday;
private String sotreIntro;
@JsonIgnore
@ManyToOne(fetch=FetchType.LAZY)
private Member user;
}
# Repository
public interface MypageCustomCrudRepository extends CrudRepository<Store, Long>, CustomMypage{
}
# RestController
@Autowired
private MypageCustomCrudRepository storeRepository;
@GetMapping("/store/{id}/{storeNum}")
public String getStores(@PathVariable("id") Long id, @PathVariable("storeNum") Long storeNum){
Optional<Store> byStoreNum = storeRepository.findById(storeNum);
Store store = byStoreNum.get();
return store.getStoreName();
}
# Test
@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
public class RestMypageControllerTests {
@Autowired
MockMvc mockMvc;
@Autowired
MemberRepository memberRepo;
@Autowired
MypageCustomCrudRepository storeRepo;
@Test
public void getStore() throws Exception {
Member member = new Member();
member.setUemail("kjuiop@naver.com");
memberRepo.save(member);
Store store = new Store();
store.setUser(member);
store.setStoreName("랍스타 맛집");
store.setStoreAddress1("서울 서초구");
store.setStoreAddress2("양재 2동");
storeRepo.save(store);
mockMvc.perform(get("/mypage/store/" + member.getId() + "/" + store.getStoreNum()))
.andDo(print())
.andExpect(status().isOk())
.andExpect(content().string("랍스타 맛집"));
}
}
- 테스트 통과
- Converter<S,T> : 하나의 타입을 다른 타입으로 변환하는 인터페이스
DomainClassConverter 이 Spring에서 공통적으로 지원하는 Converter입니다.
@Autowired
private MypageCustomCrudRepository storeRepository;
@GetMapping("/store/{id}/{storeNum}")
public String getStores(@PathVariable("id") Long id, @PathVariable("storeNum") Long storeNum){
Optional<Store> byStoreNum = storeRepository.findById(storeNum);
Store store = byStoreNum.get();
return store.getStoreName();
}
@GetMapping("/store/{id}/{storeNum}")
public String getStores(@PathVariable("id") Long id, @PathVariable("storeNum") Store store){
return store.getStoreName();
}
- 위에서 매개변수를 Long 타입으로 strongNum으로 받았던 것을 Store 객체로 Convert되어 같은 기능이
수행됨을 알수 있습니다.
대신 PathVariable("") 을 통해 어떤 파라미터를 어떤 변수로 변환할 것인지를 명시해야 올바르게
사용 가능합니다.
- 밑의 코드로도 제대로 동작 가능
# Pageable
- RestController
@GetMapping("/store/{id}")
public Page<Store> getStores(Pageable pageable){
return storeRepository.findAll(pageable);
}
- Test
@Test
public void getStores() throws Exception {
Member member = new Member();
member.setUemail("wcgfsdw@naver.com");
memberRepo.save(member);
Store store = new Store();
store.setUser(member);
store.setStoreName("랍스타 맛집");
store.setStoreAddress1("서울 서초구");
store.setStoreAddress2("양재 2동");
storeRepo.save(store);
mockMvc.perform(get("/mypage/store/" + member.getId())
.param("page", "0")
.param("size", "10")
.param("sort", "storeName"))
.andDo(print())
.andExpect(status().isOk());
}
- Console 창
'SpringFrameWork > SpringBoot' 카테고리의 다른 글
SpringBoot REST 기반 파일 업로드 (0) | 2019.10.17 |
---|---|
Spring Boot JPA Query (0) | 2019.10.08 |
Spring Boot + REST API 개념부터 설계까지 (0) | 2019.10.08 |
Spring Boot REST 기반 파일업로드 (0) | 2019.09.30 |
Spring Boot 기반 REST API 설계 (화면에서 DB까지) (0) | 2019.09.27 |
Comments