@RestController
@RequestMapping("/testController")
@Slf4j
public class TestController {
@GetMapping("/mapStructToVo")
public String mapStructToVo() {
User user = new User();
user.setId(1).setEmail("84519548@qq.com").setUserName("tang").setBirthday(new Date()).setTel("18774149799");
UserVo userVo = UserMapper.INSTANCE.convertToVo(user);
// {"birthday":"2023-10-07","email":"84519548@qq.com","id":1,"telNumber":"18774149799","userName":"tang"}
System.out.println(JSON.toJSONString(userVo));
return JSON.toJSONString(userVo);
}
}
③. 子集和映射
①. MapStruct对于对象中包含子对象也需要转换的情况也是有所支持的
②. 有一个订单PO对象Order,嵌套有User和Product对象
@Data
@EqualsAndHashCode(callSuper = false)
public class Order {
private Long id;
private String orderNo;//订单号
private Date createTime;
private String receiverAddress; //收货地址
private User user;//订单所属的用户
private List productList; //商品集合
}
@Data
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = false)
public class Product {
private Long id;
private String productSn;
private String name;
private String subTitle;
private String brandName;
private BigDecimal price;
private Integer count;//商品数量
private Date createTime;
}
@GetMapping("/mapStructToSubVo")
public String mapStructToSubVo() {
//创建一个user对象
User user = new User();
user.setId(1).setEmail("845195485@qq.com").setUserName("tang")
.setBirthday(new Date()).setTel("18774149799");
//创建productList
List productList = new ArrayList<>();
productList.add(new Product().setCount(3).setName("test-nameA"));
productList.add(new Product().setCount(7).setName("test-nameB"));
Order order = new Order();
order.setUser(user).setProductList(productList);
OrderVo orderVo = OrderMapper.INSTANCE.convertToVo(order);
// {"productVoList":[{"id":-1,"name":"test-nameA","number":3,"productSn":"d7cacdd0-4a13-46b1-a76b-fba7607d68ea"},{"id":-1,"name":"test-nameB","number":7,"productSn":"18f7c91e-c5f1-4bb6-8ae3-6e1e5847f03c"}],"userVo":{"birthday":"2023-10-12","email":"845195485@qq.com","id":1,"telNumber":"18774149799","userName":"tang"}}
System.out.println(JSON.toJSONString(orderVo));
return JSON.toJSONString(orderVo);
}
@ApiOperation(value = "组合映射")
@GetMapping("/compositeMapping")
public String compositeMapping() {
//新建一个user对象
User user = new User();
user.setBirthday(new Date()).setTel("110");
//新建一个Order对象
Order order = new Order();
order.setReceiverAddress("湖南长沙测试").setOrderNo("123456789");
// {"birthday":"2023-10-12","orderNo":"123456789","receiverAddress":"湖南长沙测试","telNumber":"110"}
UserOrderVo userOrderVo = UserMapper.INSTANCE.toUserOrderVo(user,order);
System.out.println(JSON.toJSONString(userOrderVo));
return JSON.toJSONString(userOrderVo);
}