ModelMapper는 어떤 Object에 있는 필드값을 자동으로 다른 Object 필드에 매핑해주는 라이브러리 이다.
체크박스의 체크 여부에 따라 Y/N의 값으로 받아오기 위해서,
vo의 Boolean type을 dto의 String type으로 매칭해주려고 한다.
public class InfoVo {
private String name;
private String phone;
private Boolean mailYn;
}
public class InfoDto {
private String name;
private String phone;
private String mailYn;
}
<input type="checkbox" name="mailYn">
<input type="hidden" name="_mailYn">
thymeleaf에서는 위와같이 name에 _(underscore)를 붙인 hidden input을 추가해주면
체크박스를 체크하지 않은 경우에 null이 아닌 false값을 보내준다.
public String saveTrial(InfoVo vo) {
//modelMapper는 빈 등록 후 주입받아 사용.
modelMapper.typeMape(InfoVo.class, InfoDto.class).addMappings(mapper -> {
mapper.using((Converter<Boolean, String>) context -> context.getSource() ? "Y" : "N" )
.map(InfoVo::getMailYn, InfoDto::setMailYn);
});
InfoDto dto = modelMapper.map(vo, InfoDto.class);
...
}
source와 destination의 데이터 타입이 다른 경우, Converter 인터페이스를 사용하면 변환이 가능하다.