Я соглашусь с места в карьер, что я новичок в Orika, и я все еще изучаю, как это работает, и в/из него.
Ситуация, в которой я нахожусь, - это веб-сервис, вызываемый веб-клиентом EmberJS, который возвращает список адресов (объект JSON REST). Проблема, я имею в том, что ответ, который я должен вернуть, - это немного объекта оболочки/оболочки, который просто содержит список. Я извлекаю этот список из DAO и должен сопоставить его со списком в объекте ответа.
Сопоставление списка объектов в списке dto легко; что я могу сделать. Но я не могу понять, как сопоставить этот список объектов с объектом ответа или, скорее, список dto внутри этого объекта ответа.
Я успешно сделал это:
MapperFactory mapperFactory = new DefaultMapperFactory.Builder().build();
mapperFactory.classMap(AddressVO.class, Address.class).byDefault().register();
MapperFacade mapper = mapperFactory.getMapperFacade();
List<Address> addressesRestDto = mapper.mapAsList(addressesVO, Address.class);
response = new AddressesResponse();
response.setAddresses(addressesRestDto);
return new ResponseEntity<AddressesResponse>(response, HttpStatus.OK);
Но как я могу указать mapperFactory, что я хочу отобразить список в список, который должен быть установлен в свойство AddressesResponse.addresses?
{
"addresses" : [{
"id" : 1,
"type" : "WORK",
"street" : "6262 Sunset Drive",
"city" : "Miami",
"state" : "FL",
"zip" : "33143"
}, {
"id" : 2,
"type" : "HOME",
"street" : "101 Main Street",
"city" : "New York",
"state" : "NY",
"zip" : "10022"
}
]
}
В моей веб-службе Java это возвращаемое значение:
@RequestMapping(value = "/{id}/addresses", method = RequestMethod.GET)
public ResponseEntity<AddressesResponse> retrieveContactAddresses(@PathVariable int id)
{
....
List<AddressVO> addressesVO = contactDAO.retrieveAddresses(id);
....
}
public class AddressesResponse
implements Serializable
{
private static final long serialVersionUID = -4734662942482137495L;
protected List<Address> addresses;
public List<Address> getAddresses() {
return addresses;
}
public void setAddresses(List<Address> addresses) {
this.addresses = addresses;
}
}
@JsonInclude(Include.NON_NULL) // Ensure that only not null values gets returned in the JSON document
public class Address
extends UpdateableRestDto
{
private static final long serialVersionUID = 4332153509500388664L;
protected String type;
protected String street;
protected String city;
protected String state;
protected String zip;
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getStreet() {
return street;
}
public void setStreet(String street) {
this.street = street;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
public String getZip() {
return zip;
}
public void setZip(String zip) {
this.zip = zip;
}
}
public class AddressVO
extends UpdateableVO
{
private static final long serialVersionUID = -2536056035043485871L;
protected AddressTypeEnum type;
protected String street;
protected String city;
protected String state;
protected String zip;
public AddressTypeEnum getType() {
return type;
}
public void setType(AddressTypeEnum type) {
this.type = type;
}
public String getStreet() {
return street;
}
public void setStreet(String street) {
this.street = street;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
public String getZip() {
return zip;
}
public void setZip(String zip) {
this.zip = zip;
}
}
Я думаю, что нет никакой возможности сделать это автоматически в Орике (потому что нет нужды, я думаю). То, что вы сделали до сих пор, прекрасно