【问题标题】:How to solve int value to null in RESTful API update situation?如何在 RESTful API 更新情况下解决 int 值为 null 的问题?
【发布时间】:2021-09-19 04:58:20
【问题描述】:

抱歉英语不好。

我目前使用 dto 进行请求正文映射,

Spring 无法知道输入为空或未收到,因为这两种情况都只是空。

例如,像这样。


// dto
public class UpdateDto {
  private String name;
  private Integer price;
}

// entity
public class Product {
  @Id
  @GeneratedValue
  private Long id;

  @Column(nullable = true)
  private String name;

  @Column(nullable = true)
  private Integer price;
}

我用空字符串解决了字符串的情况。当收到空字符串时,将此字段更新为空。因为大多数情况下的空字符串都可以视为 null。


// update name
if (updateDto.getName() != null) {
  if (updateDto.getName() == "") {
    // set name to null
  } else {
    // just update to getName() value
  }
}

// update price
// when i set to null?

但是整数情况,我不知道如何解决这个问题。 有什么好主意吗?

【问题讨论】:

    标签: java spring spring-boot rest


    【解决方案1】:

    您可以使用原始数据类型 int 并将 nullable 设置为 false,因为 null 对数字没有意义

    entitydto 中使用price 的原始数据类型 实体:

      @Column(nullable = false)
      private int price;
    

    DTO:

     private int price;
    

    【讨论】:

    • 感谢您的回复,但是我不明白这个答案不是我想要的。我的问题在于 dto,而不是实体。
    【解决方案2】:

    我找到了最简单的解决方案。

    相关链接(韩文):https://www.it-gundan.com/ko/java/spring-rest-controller%EC%97%90%EC%84%9C-%EB%B6%80%EB%B6%84-%EC%97%85%EB%8D%B0%EC%9D%B4%ED%8A%B8%EC%97%90-%EB%8C%80%ED%95%B4-null-%EA%B0%92%EA%B3%BC-%EC%A0%9C%EA%B3%B5%EB%90%98%EC%A7%80-%EC%95%8A%EC%9D%80-%EA%B0%92%EC%9D%84-%EA%B5%AC%EB%B3%84%ED%95%98%EB%8A%94-%EB%B0%A9%EB%B2%95/827265839/

    解决方案是,在 setter 中添加脏检查布尔标志。 以上情况,

    // dto
    public class UpdateDto {
      private String name;
      private Integer price;
      private Boolean isPriceDirty;
    
      // when setter setPrice,
      public void setPrice(Integer price) {
        this.price = price;
        this.isPriceDirty = true;
      }
    }
    
    

    那么,只有当dirty为真时,输出才能设置为null。

    【讨论】:

    • 我没有找到比这种方法更好的方法来解决这个问题。
    猜你喜欢
    • 1970-01-01
    • 2020-08-17
    • 2019-10-29
    • 2017-05-23
    • 1970-01-01
    • 2019-05-12
    • 1970-01-01
    • 1970-01-01
    • 2023-02-25
    相关资源
    最近更新 更多