Как настроить ModelMapper, чтобы он не устанавливал someClass=null, когда значения внутри равны нулю (someClass является вложенным)

впервые публикую здесь (и я надеюсь, что вы понимаете мой вопрос и мой английский).

Я хочу знать, есть ли способ «сказать» ModelMapper, чтобы он не устанавливал 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
    }
}

Мой пример.

У меня есть два класса в модели:

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:

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
}

Я сопоставляю эти классы с ModelMapper следующим образом (в методе):

Order order = someDao.getOrderByNumber(1234);
OrderDto orderDto = modelMapper.map(order, OrderDto.class);

Метод someDao.getOrderByNumber выполняет запрос и использует rowMapper для установки значений из ResultSet в переменные класса Order (и во вложенную).

Вот так: order = jdbcTemplate.queryForObject(query, new OrderMapper(), orderNumber);

*** Имя и фамилия в БД пусты.

ModelMapper установил для моего ClientDto значение null, когда firstName и lastName равны null.

Вывод OrderDto после сопоставления: «OrderDto(orderNumber=123, orderSize=10cm, orderDescription=Some order, orderClient=null)»

Заранее спасибо!


person Elena Vaner    schedule 07.06.2020    source источник


Ответы (1)


вы можете попробовать значение по умолчанию, инициализировав его в конструкторе по умолчанию или объявив свойство

пример:

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
}
person lsb    schedule 07.06.2020