Может ли инструмент MOXy "Meet-In-The-Middle" использоваться для отображения JSON? - PullRequest
0 голосов
/ 15 мая 2019

MOXy традиционно представляет собой объект-преобразователь XML, однако его можно использовать и для генерации JSON через MoxyJsonProvider. MOXy также имеет инструмент для сопоставления с XML вне преобразования 1-1 через сопоставления XPath. Можете ли вы также использовать этот инструмент для изменения вывода JSON? Я сомневаюсь в этом, но сверстник спросил меня об этом.

Сейчас я достигаю этого с помощью FasterXML Jackson с помощью нескольких методов, таких как создание @JsonProperty для определенного свойства, которое я хочу получить от другого объекта, или путем заполнения карты полями, которые я хочу создать вложенный объект JSON.

// XML Input
// I don't have this file. I'll try to generate it based on the code but the meat and bones of the question is in the transformation via
File xmlInput = new File(input.xml);

// Processs the XML
JAXBContext context = JAXBContext.newInstance("model");
Unmarshaller unmarshaller = context.createUnmarshaller();
CustomerImpl customerImpl =
(CustomerImpl) unmarshaller.unmarshal(xmlInput);

// Build the Customer Object
Customer customer = new Customer();

// Build the Address Object
ContactInfoImpl contactInfoImpl = customerImpl.getContactInfo();
if(null != contactInfoImpl) {
     AddressImpl addressImpl = customerImpl.getAddress();
     if(null != addressImpl) {
          Address address = new Address();
          customer.setAddress(address);
          address.setStreet(addressImpl.getStreet());
     }
}

Customer.java

@XmlRootElement
public class Customer {

   @XmlPath("contact-info/address")
   private Address address;
}

Это сгенерирует:

<customer>
     <contact-info>
          <address>
               <street>123 Any Street</street>
          </address>
     </contact-info>
</customer>

Может ли это быть использовано для создания модифицированных отображений JSON? То есть я могу использовать это, чтобы свернуть вложенные объекты JSON в поля или обернуть поля во вложенные объекты JSON? Пример

{
  "street" : "123 Any Street"
}

Изменено с помощью аннотации "XMLPath":

Customer.java

@XmlRootElement
public class Customer {

   @XmlPath("address")
   private String address;
}
{
  "address" : { 
    "street" : "123 Any Street"
  }
}
...