Elena Vaner
Elena Vaner

Reputation: 25

How to configure ModelMapper to not set someClass=null when the values inside are null (someClass is a nested one)

first time posting here (and i hope you can understand my question and my english).

I want to know if there is a way to "tell" ModelMapper to not set someClass=null when the values inside are null (in nested class).

My problem is, when i call my controller i expect this response:

{
    "order": {
        "orderNumber": "123",
        "orderSize": "10cm",
        "orderDescription": "Some order",
        "orderClient": {
            "firstName": null,
            "lastName": null
        }
    }
}

But i got this one:

{
    "order": {
        "orderNumber": "123",
        "orderSize": "10cm",
        "orderDescription": "Some order",
        "orderClient": null
    }
}

My example.

I have this two classes in a model:

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
}

And i have this two classes in dto:

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
}

I map these classes with ModelMapper the following way (in a method):

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.

ModelMapper set my ClientDto to null when firstName and lastName are null.

The output of OrderDto after the mapping: "OrderDto(orderNumber=123, orderSize=10cm, orderDescription=Some order, orderClient=null)"

Thanks in advance!

Upvotes: 2

Views: 926

Answers (1)

lsb
lsb

Reputation: 36

you can try with a default value by initializing in the default constructor or by declaring the property

example:

class OrderDTO {

    private String orderNumber;
    private String orderSize;
    private String orderDescription;
    private Client orderClient = new Client();

    //getters and setter
}

or

 class OrderDTO {

    private String orderNumber;
    private String orderSize;
    private String orderDescription;
    private Client orderClient;

    public OrderDTO() {
         this.orderClient = new Client();
    }
    //getters and setter
}

Upvotes: 1

Related Questions