如何配置 ModelMapper 在里面的值为 null 时不设置 someClass=null(someClass 是嵌套的)
How to configure ModelMapper to not set someClass=null when the values inside are null (someClass is a nested one)
第一次在这里发帖(希望你能理解我的问题和我的英文)
我想知道是否有办法 "tell" ModelMapper 在内部值为空时(在嵌套 class 中)不设置 someClass=null。
我的问题是,当我调用我的控制器时,我希望得到这样的响应:
{
"order": {
"orderNumber": "123",
"orderSize": "10cm",
"orderDescription": "Some order",
"orderClient": {
"firstName": null,
"lastName": null
}
}
}
但是我得到了这个:
{
"order": {
"orderNumber": "123",
"orderSize": "10cm",
"orderDescription": "Some order",
"orderClient": null
}
}
我的例子。
我在模型中有这两个 classes:
class Order {
private String number;
private String size;
private String description;
private Client client;
//getters and setters
}
class Client{
private String firstName;
private String lastName;
//getters and setters
}
我在 dto 中有这两个 classes:
class OrderDTO {
private String orderNumber;
private String orderSize;
private String orderDescription;
private Client orderClient;
//getters and setter
}
class ClientDTO {
private String firstName;
private String lastName;
//getters and setters
}
我通过以下方式(在方法中)将这些 classes 映射到 ModelMapper:
Order order = someDao.getOrderByNumber(1234);
OrderDto orderDto = modelMapper.map(order, OrderDto.class);
The method someDao.getOrderByNumber execute a query and use a
rowMapper to set the values from the ResultSet to the Order class variables (and
in the nested one).
Like this: order = jdbcTemplate.queryForObject(query, new OrderMapper(), orderNumber);
***The firstName and lastName are null in the DB.
当 firstName 和 lastName 为 null 时,ModelMapper 将我的 ClientDto 设置为 null。
映射后OrderDto的输出:"OrderDto(orderNumber=123, orderSize=10cm, orderDescription=Some order, orderClient=null)"
提前致谢!
您可以通过在默认构造函数中初始化或通过声明 属性
来尝试使用默认值
示例:
class OrderDTO {
private String orderNumber;
private String orderSize;
private String orderDescription;
private Client orderClient = new Client();
//getters and setter
}
或
class OrderDTO {
private String orderNumber;
private String orderSize;
private String orderDescription;
private Client orderClient;
public OrderDTO() {
this.orderClient = new Client();
}
//getters and setter
}
第一次在这里发帖(希望你能理解我的问题和我的英文)
我想知道是否有办法 "tell" ModelMapper 在内部值为空时(在嵌套 class 中)不设置 someClass=null。
我的问题是,当我调用我的控制器时,我希望得到这样的响应:
{
"order": {
"orderNumber": "123",
"orderSize": "10cm",
"orderDescription": "Some order",
"orderClient": {
"firstName": null,
"lastName": null
}
}
}
但是我得到了这个:
{
"order": {
"orderNumber": "123",
"orderSize": "10cm",
"orderDescription": "Some order",
"orderClient": null
}
}
我的例子。
我在模型中有这两个 classes:
class Order {
private String number;
private String size;
private String description;
private Client client;
//getters and setters
}
class Client{
private String firstName;
private String lastName;
//getters and setters
}
我在 dto 中有这两个 classes:
class OrderDTO {
private String orderNumber;
private String orderSize;
private String orderDescription;
private Client orderClient;
//getters and setter
}
class ClientDTO {
private String firstName;
private String lastName;
//getters and setters
}
我通过以下方式(在方法中)将这些 classes 映射到 ModelMapper:
Order order = someDao.getOrderByNumber(1234);
OrderDto orderDto = modelMapper.map(order, OrderDto.class);
The method someDao.getOrderByNumber execute a query and use a rowMapper to set the values from the ResultSet to the Order class variables (and in the nested one).
Like this:
order = jdbcTemplate.queryForObject(query, new OrderMapper(), orderNumber);
***The firstName and lastName are null in the DB.
当 firstName 和 lastName 为 null 时,ModelMapper 将我的 ClientDto 设置为 null。
映射后OrderDto的输出:"OrderDto(orderNumber=123, orderSize=10cm, orderDescription=Some order, orderClient=null)"
提前致谢!
您可以通过在默认构造函数中初始化或通过声明 属性
来尝试使用默认值示例:
class OrderDTO {
private String orderNumber;
private String orderSize;
private String orderDescription;
private Client orderClient = new Client();
//getters and setter
}
或
class OrderDTO {
private String orderNumber;
private String orderSize;
private String orderDescription;
private Client orderClient;
public OrderDTO() {
this.orderClient = new Client();
}
//getters and setter
}