public class Person {
private Long id;
private String name;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
@RestController
public class SampleController {
@GetMapping("/hello")
public String hello(@RequestParam("id") Person person){
return "hello " + person.getName();
}
다음과 같이 id가 들어오는 경우에 객체의 이름을 반환하는 경우 Formatter나 Converter를 직접 만들 필요가 없다. 이 경우에는 스프링 데이터 JPA의 도움을 받을 수 있다.
스프링 데이터 JPA는 스프링 MVC용 도메인 클래스 컨버터를 제공한다.
도메인 클래스 컨버터
pom.xml에 의존성 추가
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
</dependency>
도메인 클래스
@Entity
public class Person {
@Id @GeneratedValue // 아이디를 DB에 들어갈 때 자동생성한다.
private Long id;
private String name;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
리포지토리
public interface PersonRepository extends JpaRepository<Person, Long> {
}
<엔티티, 키값에 해당하는 타입>
테스트 코드
@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
public class SampleControllerTest {
@Autowired
MockMvc mockMvc;
@Autowired
PersonRepository personRepository;
@Test
public void hello() throws Exception{
Person person = new Person();
person.setName("spring");
Person savedPerson = personRepository.save(person);
this.mockMvc.perform(get("/hello")
.param("id", savedPerson.getId().toString()))
.andDo(print())
.andExpect(content().string("hello spring"));
}
}
참고