You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置MapStruct使其基于@JsonProperty注解完成字段映射

MapStruct基于@JsonProperty注解自动映射的实现方法

是可以实现的,MapStruct从1.5版本开始原生支持读取Jackson的@JsonProperty注解值作为字段映射的匹配依据,不需要手动为每个差异字段编写@Mapping声明,只要调整编译配置即可。

配置方式

根据你使用的构建工具选择对应配置:

  • Maven配置:在maven-compiler-plugin的编译参数中添加注解处理器配置,示例如下:
<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-compiler-plugin</artifactId>
  <version>3.8.1</version>
  <configuration>
    <source>1.8</source>
    <target>1.8</target>
    <annotationProcessorPaths>
      <path>
        <groupId>org.mapstruct</groupId>
        <artifactId>mapstruct-processor</artifactId>
        <version>1.5.5.Final</version>
      </path>
      <path>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-annotations</artifactId>
        <version>2.15.2</version>
      </path>
    </annotationProcessorPaths>
    <compilerArgs>
      <arg>-Amapstruct.accessor_naming_strategy=jackson</arg>
      <arg>-Amapstruct.experimental.synthetic_provider_method_names=true</arg>
    </compilerArgs>
  </configuration>
</plugin>
  • Gradle配置:在build.gradle的编译参数中添加如下配置:
compileJava {
    options.compilerArgs += [
        '-Amapstruct.accessor_naming_strategy=jackson',
        '-Amapstruct.experimental.synthetic_provider_method_names=true'
    ]
}

验证效果

配置完成后,你给出的示例代码不需要额外编写字段映射规则,直接定义Mapper接口即可自动完成映射:

@Mapper
public interface AuftragMapper {
    AuftragMapper INSTANCE = Mappers.getMapper(AuftragMapper.class);
    OrderDto convertToDto(Auftrag auftrag);
}

编译后生成的实现类会自动将Auftrag类的auftragsart字段值赋值给OrderDto的orderType字段。

注意事项

  • 必须使用1.5及以上版本的MapStruct,低版本无该特性支持
  • @JsonProperty注解标注在字段、getter方法、setter方法上均可被识别
  • 如果同时存在手动配置的@Mapping注解,手动配置的优先级高于注解自动匹配

内容的提问来源于stack exchange,提问作者Sven Nagel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 00:42:02