Klasa ClientDto
wygląda tak:
public final class ClientDto {
private Long id;
private String login;
private String nip;
private String companyName;
private String contactAddressCity;
private String contactAddressStreet;
private String contactAddressHouseNumberEtc;
private String contactAddressPostalCode;
private String registerAddressCity;
private String registerAddressStreet;
private String registerAddressHouseNumberEtc;
private String registerAddressPostalCode;
// ...
jest tworzona z Client
w której adresy nie muszą być podane, więc pojawia się nullpointerexception gdy mapuję dto tak:
@Override
public ClientDto clientToDto(Client client) {
ClientDto clientDto = new ClientDto();
clientDto.setId(client.getId())
.setLogin(client.getUser().getLogin())
.setCompanyName(client.getCompanyName())
.setContactAddressCity(client.getContactAddress().city)
.setContactAddressHouseNumberEtc(client.getContactAddress().houseNumberEtc)
.setContactAddressPostalCode(client.getContactAddress().postalCode)
.setContactAddressStreet(client.getContactAddress().street)
.setNip(client.getNip())
.setRegisterAddressCity(client.getRegisterAddress().city)
.setRegisterAddressHouseNumberEtc(client.getRegisterAddress().houseNumberEtc)
.setRegisterAddressPostalCode(client.getRegisterAddress().postalCode)
.setRegisterAddressStreet(client.getRegisterAddress().street);
return clientDto;
}
np. jak nie ma adresu to powinienem dostać jsona:
{
"id": 2,
"login": null,
"nip": "9510525054",
"companyName": "Janusz Soft sp. z o.o.",
"contactAddressCity": null,
"contactAddressStreet": null,
"contactAddressHouseNumberEtc": null,
"contactAddressPostalCode": null,
"registerAddressCity": null,
"registerAddressStreet": null,
"registerAddressHouseNumberEtc": null,
"registerAddressPostalCode": null
}
Jak to sprytniej obsłużyć niż
@Override
public ClientDto clientToDto(Client client) {
ClientDto clientDto = new ClientDto();
clientDto.setId(client.getId())
.setLogin(client.getUser().getLogin())
.setCompanyName(client.getCompanyName())
.setNip(client.getNip());
if(client.getContactAddress == null) {
clientDto.setContactAddressCity(client.getContactAddress().city)
.setContactAddressHouseNumberEtc(client.getContactAddress().houseNumberEtc)
.setContactAddressPostalCode(client.getContactAddress().postalCode)
.setContactAddressStreet(client.getContactAddress().street)
}
if(client.getRegisterAddress == null) {
clientDto.setRegisterAddressCity(client.getRegisterAddress().city)
.setRegisterAddressHouseNumberEtc(client.getRegisterAddress().houseNumberEtc)
.setRegisterAddressPostalCode(client.getRegisterAddress().postalCode)
.setRegisterAddressStreet(client.getRegisterAddress().street);
}
return clientDto;
}
. W Encji jak dam Optionale do getterozy to mi się nic nie rozwali? A co jak mam publiczne metody, mam je robić Optionalami?
Krew mnie zalewa od tego JPA. Po 5 razy przepisuje się to samo.