MVC設定(7):WebMvcConfigure-ドメインクラス変換器


8.WebMvcConfigure—ドメインクラス変換器

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を入力したときにオブジェクトの名前を返す場合は、次のようにフォームまたはConverterを作成する必要はありません.この場合、Spring Data JPAのサポートを受けることができます.
Spring Data JPAはSpring MVCにドメインクラス変換器を提供します.
ドメインクラス変換器
  • Spring Data JPAが提供するRepositoryを使用してIDに対応するエンティティを読み込みます.
  • 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"));
        }
    }
    リファレンス
  • インフラストラクチャ:SpringWeb MVC(白旗船)