Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 发送DTO时如何避免NULL?_Java_Spring_Hibernate_Spring Mvc_Spring Boot - Fatal编程技术网

Java 发送DTO时如何避免NULL?

Java 发送DTO时如何避免NULL?,java,spring,hibernate,spring-mvc,spring-boot,Java,Spring,Hibernate,Spring Mvc,Spring Boot,我有一个DTO和几个列表 @Data public class ContributionUpdate<T extends MovieRequest> { private Map<Long, T> elementsToAdd; private List<T> newElementsToAdd; private Map<Long, T> elementsToUpdate; private List<Long>

我有一个DTO和几个列表

@Data
public class ContributionUpdate<T extends MovieRequest> {
    private Map<Long, T> elementsToAdd;
    private List<T> newElementsToAdd;
    private Map<Long, T> elementsToUpdate;
    private List<Long> idsToDelete;
}
@数据
公共类贡献更新{
私有地图元素添加;
私有列表newElementsToAdd;
私有地图元素更新;
私有列表idsToDelete;
}

发送对象时,某些课程可能为空。操作这些列表的方法看起来很糟糕,因为条件检查消息是否为NULL。如果对象的列表为空,是否有正确的方法创建空列表?

可能是Apache
CollectionsUtils
方法将帮助您:

public static <T> Collection<T> emptyIfNull(Collection<T> collection)
公共静态集合emptyIfNull(集合集合)
如果参数为null或 论点本身则不然


可能是Apache
CollectionsUtils
方法将帮助您:

public static <T> Collection<T> emptyIfNull(Collection<T> collection)
公共静态集合emptyIfNull(集合集合)
如果参数为null或 论点本身则不然


您可以将DTO更新为以下内容:

@Data
public class ContributionUpdate<T extends MovieRequest> {
    private Map<Long, T> elementsToAdd = new HashMap<>();
    private List<T> newElementsToAdd = new ArrayList<>();
    private Map<Long, T> elementsToUpdate = new HashMap<>();
    private List<Long> idsToDelete = new ArrayList<>();
}
@数据
公共类贡献更新{
私有映射元素stoadd=newhashmap();
私有列表newElementsToAdd=newarraylist();
私有映射元素stoupdate=newhashmap();
私有列表idstodelite=new ArrayList();
}

但这可能不是一个好的解决方案,您最好更新返回此数据的服务,以便在缺少数据的情况下返回空地图或列表。

您可以将您的数据更新为以下内容:

@Data
public class ContributionUpdate<T extends MovieRequest> {
    private Map<Long, T> elementsToAdd = new HashMap<>();
    private List<T> newElementsToAdd = new ArrayList<>();
    private Map<Long, T> elementsToUpdate = new HashMap<>();
    private List<Long> idsToDelete = new ArrayList<>();
}
@数据
公共类贡献更新{
私有映射元素stoadd=newhashmap();
私有列表newElementsToAdd=newarraylist();
私有映射元素stoupdate=newhashmap();
私有列表idstodelite=new ArrayList();
}

但这可能不是一个好的解决方案,您最好更新返回此数据的服务,以便在缺少数据的情况下返回空的映射或列表。

Java中的引用类型总是不可为null的,所以为了减少对null值的膨胀检查,您可以使用
assert
语句强制输入有效

然后,您的函数将从以下内容开始

assert contribution.getElementsToAdd() != null;
assert contribution.getElementsToUpdate() != null;
assert contribution.contribution.getIdsToDelete() != null;
...
然后您就可以安全地使用这些函数,并确保您将拥有一个有效的值。如果用户在开发和测试中向函数发送无效值,则断言将失败

在某种程度上,这是防御性编码和你说“看,如果你给了我无效的输入,我就抛出一个异常”之间的平衡


对于
ContributionUpdate
类,可以在构造函数中使用空值初始化每个映射/列表,这样就不会默认为
null
引用并命中那些断言。

Java中的引用类型始终不可为null,因此为了减少对null值的膨胀检查,您可以使用
assert
语句强制输入有效

然后,您的函数将从以下内容开始

assert contribution.getElementsToAdd() != null;
assert contribution.getElementsToUpdate() != null;
assert contribution.contribution.getIdsToDelete() != null;
...
然后您就可以安全地使用这些函数,并确保您将拥有一个有效的值。如果用户在开发和测试中向函数发送无效值,则断言将失败

在某种程度上,这是防御性编码和你说“看,如果你给了我无效的输入,我就抛出一个异常”之间的平衡

对于
ContributionUpdate
类,可以在构造函数中用空值初始化每个映射/列表,这样就不会默认为
null
引用并点击这些断言

  • 使列表和地图成为最终结果
  • 在构造函数中设置它们(当然)
  • 使用setter设置值
  • public void setBlammyList(最终列表newValue) { blammyList.clear(); if(CollectionUtils.isNotEmpty(newValue)) { blammyList.addAll(newValue); } }
  • 使列表和地图成为最终结果
  • 在构造函数中设置它们(当然)
  • 使用setter设置值
  • public void setBlammyList(最终列表newValue) { blammyList.clear(); if(CollectionUtils.isNotEmpty(newValue)) { blammyList.addAll(newValue); } }