código limpio hacer parche parcial de la clase de dominio en la primavera @PatchMapping?

callofdutyops:

En primavera, escribo código como este para procesar una solicitud de parche:

@PatchMapping(path="/{orderId}", consumes="application/json")
public Order patchOrder(@PathVariable("orderId") Long orderId, @RequestBody Order patch) {
    Order order = repo.findById(orderId).get();
    if (patch.getDeliveryName() != null) {
        order.setDeliveryName(patch.getDeliveryName());
    }
    if (patch.getDeliveryStreet() != null) {
        order.setDeliveryStreet(patch.getDeliveryStreet());
    }
    if (patch.getDeliveryCity() != null) {
        order.setDeliveryCity(patch.getDeliveryCity());
    }
    //...
    //Check all fields in Order class.
    return repo.save(order);
}

Obviamente, hay al menos dos inconvenientes aquí:

  1. El código no es limpia, debido a una gran cantidad de cheques nulos.
  2. Incluso si la abstracción de comprobación nulo en una función, que hay todavía problemas cuando cambiamos la definición de Orderclase. Es decir, cuando la eliminación de campos o la adición de nuevos campos en Orderla clase, este trozo de código también debe ser reescrito.

Sé que puedo hacer algunas nula comprobación en el lado del cliente como enviar solamente los campos no nulos que hacer un parche, pero me pregunto si hay una manera elegante de hacer esto? Al igual que el mapeo objeto o algunas de las otras maneras?

Parth Kansara:

Primero lo primero en vez de comprobar simplemente nula, como a continuación:

if (patch.getDeliveryName() != null) {
    order.setDeliveryName(patch.getDeliveryName());
}

Se puede hacer una línea:

order.setDeliveryName(StringUtils.isEmpty(patch.getDeliveryName()) ? "" : patch.getDeliveryName());

También usando resorte proporcionado método comprueba para nula y valores vacíos.

Y para el punto "b" se puede utilizar a continuación código:

BeanUtils.copyProperties(bean2, bean1);

añadir tras la dependencia en el pom.xml

<dependency>
    <groupId>commons-beanutils</groupId>
    <artifactId>commons-beanutils</artifactId>
    <version>1.9.3</version>
</dependency>

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=215644&siteId=1
Recomendado
Clasificación