【问题标题】:How to use http patch request in spring boot?如何在spring boot中使用http补丁请求?
【发布时间】:2019-06-29 21:20:40
【问题描述】:

我正在尝试使用 PATCH 请求。

下面是我正在使用的代码。它就像 if 语句的阶梯

@PatchMapping("/updateInvoiceByEmail/{email}")
    public Mono<ResponseEntity<Invoice>> updateInvoiceByEmail(
                @PathVariable String email,
                @RequestBody Invoice invoice) {

        return invoiceRepository
        .findByEmail(vendorEmail)

        .flatMap(existing -> {
            if (invoice.getInvoiceStatus() != null) {
                existing.setInvoiceStatus(invoice.getInvoiceStatus());
            }
            if (invoice.getCanRaise() != null) {
                existing.setCanRaise(invoice.getCanRaise());
            }
            if (invoice.getAttachmentId() != null) {
                existing.setAttachmentId(invoice.getAttachmentId());
            }
            if (invoice.getInvoiceId() != null) {
                existing.setInvoiceId(invoice.getInvoiceId());
            }
            ... and so on.
            return invoiceRepository.save(existing);

        })
        .map(updatedInvoice -> new ResponseEntity<>(updatedInvoice, HttpStatus.OK))
        .defaultIfEmpty(new ResponseEntity<>(HttpStatus.NOT_FOUND));

我正在使用 Spring WebFlux 和 mongodb

我怎样才能做得更短更干净。

谢谢

【问题讨论】:

  • 你不能让它更干净,因为你设计的 api 有这个逻辑。

标签: spring-boot spring-webflux


【解决方案1】:

如果你想减少行数,你可以使用反射,尽管反射总是你应该做的最后一件事。我要做的是将这个 if - get - set 逻辑移动到单独的组件中(在单独的类或方法中)。除此之外,我只想提一下,简单性并不是这里唯一的问题。假设null 是客户端发送的有效值,您将需要一些机制来检测是否未发送值或者您明确想要设置null 值。将此代码移动到单独组件的一些示例如下所示:

class InvoiceAssembler {
   public static assemble(Invoice existing, Invoice newInvoice) {
     if(newInvoice.getInvoiceId() != null) {
         existing.setInvoiceId(newInvoice.getInvoiceId());
     }
     ...
   }
} 

【讨论】:

    【解决方案2】:

    我认为您可以改进的唯一方法是,如果您对最有可能更新的字段使用 UpdateDTO,从而减少您必须检查的字段数量。

    Good description of how you use UpdateDTO here

    否则你会留下反射,但我不知道这是否会使你的代码更具可读性或更混乱。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-04-20
      • 2017-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多