MapStruct文档对为NullValueMappingStrategy选择的合理默认值有如下说明。返回默认值:
Bean映射:将返回一个“空”的目标Bean,除了常量和表达式之外,它们将在出现时填充。
基本体:将返回基本体的默认值,例如,布尔值为false,int值为0。
迭代器/数组:将返回一个空的迭代器。
地图:将返回一个空地图。
问题是,我们希望能够在@Mapper级别上指定,例如,Iterables应该具有NullValueMappingStrategy。返回默认值,但不返回原语。这样做的原因是,对于我们的用例来说,空iterable是一个合理的默认值,但对于int来说,0不是一个合理的默认值。我们不希望必须声明,例如:
@IterableMapping(nullValueMappingStrategy = NullValueMappingStrategy.RETURN_DEFAULT)
对于我们正在映射的每个iterable。
MapStruct是否提供了一种我在文档中找不到的干净方法?
我认为上面这一行实际上是文档中的复制粘贴错误。我想说清楚:NullValueMappingStrategy
只适用于映射方法的参数。而不是bean属性。在bean映射方法中,不可能将基元参数定义为源。
然而,可以将非bean定义为bean映射方法的源。就像下面的mapFrom
方法一样:
package org.mapstruct.ap.test.bugs._xyz;
import java.util.List;
import org.mapstruct.Mapper;
import org.mapstruct.NullValueMappingStrategy;
import org.mapstruct.factory.Mappers;
@Mapper( nullValueMappingStrategy = NullValueMappingStrategy.RETURN_DEFAULT)
public interface XyzMapper {
XyzMapper INSTANCE = Mappers.getMapper(XyzMapper.class);
Target map(Source source);
Target mapFrom( Integer myInt, List<Integer> myList);
class Source {
private int myInt;
private List<Integer> myList;
public int getMyInt() {
return myInt;
}
public void setMyInt(int myInt) {
this.myInt = myInt;
}
public List<Integer> getMyList() {
return myList;
}
public void setMyList(List<Integer> myList) {
this.myList = myList;
}
}
class Target {
private int myInt;
private List<Integer> myList;
public int getMyInt() {
return myInt;
}
public void setMyInt(int myInt) {
this.myInt = myInt;
}
public List<Integer> getMyList() {
return myList;
}
public void setMyList(List<Integer> myList) {
this.myList = myList;
}
}
}
当使用NullValueMappingStrategy.RETURN_DEFAULT
时,mapFrom将返回一个空的Target
,就像在留档中指定的那样。
应从与NullValueMappingStrategy相关的留档中删除此行:基元:将返回基元的默认值,例如布尔值为false或int值为0。
问题内容: 我希望使用驼峰式命名约定对我的班级进行序列化和反序列化。我知道我可以使用此处所述的重载: 有什么办法可以通过类属性(通过属性)应用相同的配置,这样我就不需要覆盖序列化设置了? 我可以编写一个自定义转换器,但是对于这样简单的事情来说,这似乎有些过头了。 问题答案: 如果您使用的是Json.NET9.0.1或更高版本,则可以使用上的属性来实现所需的功能。如果您需要将参数传递给的构造函数,请
我有一个对象带有字段
TestNG groups注释是在测试方法级别声明的,也就是说,您可以指定特定测试方法可以属于哪些组。 如。 对于所有测试方法只属于一个组的给定场景,在每个测试方法中指定组名几乎是一种开销。在这种情况下,有没有办法将组名设置为更高的(类)级别?
我正在做SpringBoot项目,并遵循一些测试SpringBoot的说明。 当我尝试将mysql DB与项目连接时,服务找不到映射器。 我不知道为什么它找不到映射器... 这是服务代码和 这是映射程序代码 下面的错误是 我将发布我的包裹设置的图片。。。
我正在使用下面的代码片段映射对象 它没有映射,但当我添加这个时,它工作得很好 但却无法理解它的功能<代码>导入={Instant.class,DateTimeFormatter.class}它如何帮助映射对象?
与Topic相关的配置既包含服务器默认值,也包含可选的每个Topic覆盖值。 如果没有给出每个Topic的配置,那么服务器默认值就会被使用。 通过提供一个或多个 --config 选项,可以在创建Topic时设置覆盖值。 本示例使用自定义的最大消息大小和刷新率创建了一个名为 my-topic 的topic: > bin/kafka-topics.sh --zookeeper localhos