Skip to content

Commit 8d9bcc5

Browse files
authored
Spring Extensions 2.0.0 (#153)
1 parent 4e41d6e commit 8d9bcc5

File tree

146 files changed

+7127
-83481
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

146 files changed

+7127
-83481
lines changed
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
---
2+
title: "MapStruct Spring Extensions 2.0.0 released"
3+
author: Raimund Klein
4+
date: "2025-11-15"
5+
tags: [ release, news ]
6+
---
7+
8+
It is my pleasure to announce the next official release of MapStruct Spring Extensions.
9+
What started out as a [StackOverflow question](https://stackoverflow.com/q/58081224/3361467) turned into its
10+
own [(sub-)project](https://github.com/mapstruct/mapstruct-spring-extensions) within the MapStruct organization.
11+
12+
Changes in this release:
13+
14+
- The minimum requirements for applying these extensions are now Java 17 and Spring 6.
15+
- Exclusive use of `jakarta.annotation.PostConstruct` instead of having a default option of the legacy `javax.annotation.PostConstruct`.
16+
17+
Including the annotations and extensions defined in this project will generate a class acting as bridge between
18+
MapStruct's conventions and Spring'
19+
s [ConversionService API](https://docs.spring.io/spring-framework/docs/current/reference/html/core.html#core-convert-ConversionService-API)
20+
that in turn can be added to any Mapper's `uses` attribute. See
21+
the [examples](https://github.com/mapstruct/mapstruct-spring-extensions/tree/master/examples) for details.
22+
23+
<!--more-->
24+
25+
### Thanks
26+
27+
Thanks to [Sjaak Derksen](https://github.com/sjaakd) for suggesting this solution
28+
and [Filip Hrisafov](https://github.com/filiphr) for opening the community project.
29+
Also thanks
30+
to [Jeff Schnitzer](https://github.com/stickfigure), [Jesse Bonzo](https://github.com/jbonzohln), [Cosimo Damiano Prete](https://github.com/cdprete), [Daniel Shiplett](https://github.com/danielshiplett), [Alexey](https://github.com/PRIESt512), [Olivier Boudet](https://github.com/olivierboudet), [John Kelly](https://github.com/postalservice14), [Myat Min](https://github.com/myatmin), [Hypercube Software](https://github.com/hypercube-software), [coding-guo](https://github.com/coding-guo), [freund17](https://github.com/freund17), [Joose Haverinen](https://github.com/joosehav), [pw-lehre](https://github.com/pw-lehre), [simonovdenis](https://github.com/simonovdenis),
31+
and [George Noble](https://github.com/giorgioscia) for their suggestions and fixes in previous releases.
32+
If you feel like there's something missing in MapStruct which could make the Spring experience any smoother, please get
33+
involved!
34+
35+
Also, if your favourite library or framework could use some tweaking with regard to MapStruct, contact us.
36+
37+
Happy coding with MapStruct Spring Extensions!
38+
39+
### Download
40+
41+
You can fetch the release from Maven Central using the following GAV coordinates:
42+
43+
* Annotation
44+
JAR: [org.mapstruct.extensions.spring:mapstruct-spring-annotations:2.0.0](http://search.maven.org/#artifactdetails|org.mapstruct.extensions.spring|mapstruct-spring-annotations|2.0.0|jar)
45+
* Annotation processor
46+
JAR: [org.mapstruct.extensions.spring:mapstruct-spring-extensions:2.0.0](http://search.maven.org/#artifactdetails|org.mapstruct.extensions.spring|mapstruct-spring-extensions|2.0.0|jar)
47+
* Test Extensions with Converter Scan
48+
JAR: [org.mapstruct.extensions.spring:mapstruct-spring-extensions:2.0.0](http://search.maven.org/#artifactdetails|org.mapstruct.extensions.spring|mapstruct-spring-test-extensions|2.0.0|jar)
49+
50+
Alternatively, you can get ZIP and TAR.GZ distribution bundles - containing all the JARs, documentation
51+
etc. - [from GitHub](https://github.com/mapstruct/mapstruct-spring-extensions/releases/tag/v2.0.0).
52+
53+
If you run into any trouble or would like to report a bug, feature request or similar, use the following channels to get
54+
in touch:
55+
56+
* Get help in our [Gitter room](https://gitter.im/mapstruct/mapstruct-users) or at
57+
the [mapstruct-users](https://groups.google.com/forum/?fromgroups#!forum/mapstruct-users) group
58+
* Report bugs and feature requests via
59+
the [issue tracker](https://github.com/mapstruct/mapstruct-spring-extensions/issues)
60+
* Follow [@GetMapStruct](https://twitter.com/GetMapStruct) on Twitter
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
name = "Spring Extensions"
22
versionRef = "spring-extensions"
33
order = 450
4-
releaseDate = 2025-03-14
4+
releaseDate = 2025-11-15
55
spring = true
Lines changed: 46 additions & 148 deletions
Original file line numberDiff line numberDiff line change
@@ -1,182 +1,80 @@
11
<!DOCTYPE HTML>
2-
<!-- NewPage -->
32
<html lang="de">
43
<head>
5-
<!-- Generated by javadoc -->
6-
<title>All Classes (annotations 1.1.3 API)</title>
4+
<!-- Generated by javadoc (17) -->
5+
<title>All Classes and Interfaces (annotations 2.0.0 API)</title>
6+
<meta name="viewport" content="width=device-width, initial-scale=1">
77
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
8+
<meta name="description" content="class index">
9+
<meta name="generator" content="javadoc/AllClassesIndexWriter">
810
<link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
9-
<link rel="stylesheet" type="text/css" href="jquery/jquery-ui.min.css" title="Style">
11+
<link rel="stylesheet" type="text/css" href="script-dir/jquery-ui.min.css" title="Style">
1012
<link rel="stylesheet" type="text/css" href="jquery-ui.overrides.css" title="Style">
1113
<script type="text/javascript" src="script.js"></script>
12-
<script type="text/javascript" src="jquery/jszip/dist/jszip.min.js"></script>
13-
<script type="text/javascript" src="jquery/jszip-utils/dist/jszip-utils.min.js"></script>
14-
<!--[if IE]>
15-
<script type="text/javascript" src="jquery/jszip-utils/dist/jszip-utils-ie.min.js"></script>
16-
<![endif]-->
17-
<script type="text/javascript" src="jquery/jquery-3.7.1.min.js"></script>
18-
<script type="text/javascript" src="jquery/jquery-ui.min.js"></script>
14+
<script type="text/javascript" src="script-dir/jquery-3.6.1.min.js"></script>
15+
<script type="text/javascript" src="script-dir/jquery-ui.min.js"></script>
1916
</head>
20-
<body>
21-
<script type="text/javascript"><!--
22-
try {
23-
if (location.href.indexOf('is-external=true') == -1) {
24-
parent.document.title="All Classes (annotations 1.1.3 API)";
25-
}
26-
}
27-
catch(err) {
28-
}
29-
//-->
30-
var pathtoroot = "./";
31-
var useModuleDirectories = true;
17+
<body class="all-classes-index-page">
18+
<script type="text/javascript">var pathtoroot = "./";
3219
loadScripts(document, 'script');</script>
3320
<noscript>
3421
<div>JavaScript is disabled on your browser.</div>
3522
</noscript>
36-
<header role="banner">
23+
<div class="flex-box">
24+
<header role="banner" class="flex-header">
3725
<nav role="navigation">
38-
<div class="fixedNav">
3926
<!-- ========= START OF TOP NAVBAR ======= -->
40-
<div class="topNav"><a id="navbar.top">
41-
<!-- -->
42-
</a>
43-
<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
44-
<a id="navbar.top.firstrow">
45-
<!-- -->
46-
</a>
47-
<ul class="navList" title="Navigation">
27+
<div class="top-nav" id="navbar-top">
28+
<div class="skip-nav"><a href="#skip-navbar-top" title="Skip navigation links">Skip navigation links</a></div>
29+
<ul id="navbar-top-firstrow" class="nav-list" title="Navigation">
4830
<li><a href="org/mapstruct/extensions/spring/package-summary.html">Package</a></li>
4931
<li>Class</li>
5032
<li><a href="overview-tree.html">Tree</a></li>
51-
<li><a href="deprecated-list.html">Deprecated</a></li>
5233
<li><a href="index-all.html">Index</a></li>
53-
<li><a href="help-doc.html">Help</a></li>
34+
<li><a href="help-doc.html#all-classes">Help</a></li>
5435
</ul>
5536
</div>
56-
<div class="subNav">
57-
<ul class="navList" id="allclasses_navbar_top">
58-
<li><a href="allclasses.html">All&nbsp;Classes</a></li>
59-
</ul>
60-
<ul class="navListSearch">
61-
<li><label for="search">SEARCH:</label>
62-
<input type="text" id="search" value="search" disabled="disabled">
63-
<input type="reset" id="reset" value="reset" disabled="disabled">
64-
</li>
65-
</ul>
66-
<div>
67-
<script type="text/javascript"><!--
68-
allClassesLink = document.getElementById("allclasses_navbar_top");
69-
if(window==top) {
70-
allClassesLink.style.display = "block";
71-
}
72-
else {
73-
allClassesLink.style.display = "none";
74-
}
75-
//-->
76-
</script>
77-
<noscript>
78-
<div>JavaScript is disabled on your browser.</div>
79-
</noscript>
37+
<div class="sub-nav">
38+
<div class="nav-list-search"><label for="search-input">SEARCH:</label>
39+
<input type="text" id="search-input" value="search" disabled="disabled">
40+
<input type="reset" id="reset-button" value="reset" disabled="disabled">
8041
</div>
81-
<a id="skip.navbar.top">
82-
<!-- -->
83-
</a></div>
84-
<!-- ========= END OF TOP NAVBAR ========= -->
8542
</div>
86-
<div class="navPadding">&nbsp;</div>
87-
<script type="text/javascript"><!--
88-
$('.navPadding').css('padding-top', $('.fixedNav').css("height"));
89-
//-->
90-
</script>
91-
</nav>
43+
<!-- ========= END OF TOP NAVBAR ========= -->
44+
<span class="skip-nav" id="skip-navbar-top"></span></nav>
9245
</header>
46+
<div class="flex-content">
9347
<main role="main">
9448
<div class="header">
95-
<h1 title="All&amp;nbsp;Classes" class="title">All&nbsp;Classes</h1>
49+
<h1 title="All Classes and Interfaces" class="title">All Classes and Interfaces</h1>
9650
</div>
97-
<div class="allClassesContainer">
98-
<ul class="blockList">
99-
<li class="blockList">
100-
<table class="typeSummary">
101-
<caption><span>Annotation Types Summary</span><span class="tabEnd">&nbsp;</span></caption>
102-
<tr>
103-
<th class="colFirst" scope="col">Class</th>
104-
<th class="colLast" scope="col">Description</th>
105-
</tr>
106-
<tr id="i0" class="altColor">
107-
<td class="colFirst"><a href="org/mapstruct/extensions/spring/AdapterMethodName.html" title="annotation in org.mapstruct.extensions.spring">AdapterMethodName</a></td>
108-
<th class="colLast" scope="row">
51+
<div id="all-classes-table">
52+
<div class="caption"><span>Annotation Interfaces</span></div>
53+
<div class="summary-table two-column-summary">
54+
<div class="table-header col-first">Class</div>
55+
<div class="table-header col-last">Description</div>
56+
<div class="col-first even-row-color all-classes-table all-classes-table-tab7"><a href="org/mapstruct/extensions/spring/AdapterMethodName.html" title="annotation interface in org.mapstruct.extensions.spring">AdapterMethodName</a></div>
57+
<div class="col-last even-row-color all-classes-table all-classes-table-tab7">
10958
<div class="block">Overrides the default method name generated in the Adapter class.</div>
110-
</th>
111-
</tr>
112-
<tr id="i1" class="rowColor">
113-
<td class="colFirst"><a href="org/mapstruct/extensions/spring/DelegatingConverter.html" title="annotation in org.mapstruct.extensions.spring">DelegatingConverter</a></td>
114-
<th class="colLast" scope="row">
115-
<div class="block">Indicates that the system should generate a delegating <a href="https://docs.spring.io/spring/docs/5.0.0.RELEASE/javadoc-api/org/springframework/core/convert/converter/Converter.html?is-external=true" title="class or interface in org.springframework.core.convert.converter" class="externalLink"><code>Converter</code></a> that will call the annotated method in its
116-
own <a href="https://docs.spring.io/spring/docs/5.0.0.RELEASE/javadoc-api/org/springframework/core/convert/converter/Converter.html?is-external=true#convert-S-" title="class or interface in org.springframework.core.convert.converter" class="externalLink"><code>Converter.convert(Object)</code></a>.</div>
117-
</th>
118-
</tr>
119-
<tr id="i2" class="altColor">
120-
<td class="colFirst"><a href="org/mapstruct/extensions/spring/ExternalConversion.html" title="annotation in org.mapstruct.extensions.spring">ExternalConversion</a></td>
121-
<th class="colLast" scope="row">
122-
<div class="block">Allows the specification of a conversion that is available via the <a href="https://docs.spring.io/spring/docs/5.0.0.RELEASE/javadoc-api/org/springframework/core/convert/ConversionService.html?is-external=true" title="class or interface in org.springframework.core.convert" class="externalLink"><code>ConversionService</code></a>, but is <em>not</em>
123-
declared as a MapStruct mapper within the scope of the <a href="org/mapstruct/extensions/spring/SpringMapperConfig.html" title="annotation in org.mapstruct.extensions.spring"><code>SpringMapperConfig</code></a>.</div>
124-
</th>
125-
</tr>
126-
<tr id="i3" class="rowColor">
127-
<td class="colFirst"><a href="org/mapstruct/extensions/spring/SpringMapperConfig.html" title="annotation in org.mapstruct.extensions.spring">SpringMapperConfig</a></td>
128-
<th class="colLast" scope="row">
59+
</div>
60+
<div class="col-first odd-row-color all-classes-table all-classes-table-tab7"><a href="org/mapstruct/extensions/spring/DelegatingConverter.html" title="annotation interface in org.mapstruct.extensions.spring">DelegatingConverter</a></div>
61+
<div class="col-last odd-row-color all-classes-table all-classes-table-tab7">
62+
<div class="block">Indicates that the system should generate a delegating <a href="https://docs.spring.io/spring/docs/6.0.0/javadoc-api/org/springframework/core/convert/converter/Converter.html" title="class or interface in org.springframework.core.convert.converter" class="external-link"><code>Converter</code></a> that will call the annotated method in its
63+
own <a href="https://docs.spring.io/spring/docs/6.0.0/javadoc-api/org/springframework/core/convert/converter/Converter.html#convert(S)" title="class or interface in org.springframework.core.convert.converter" class="external-link"><code>Converter.convert(Object)</code></a>.</div>
64+
</div>
65+
<div class="col-first even-row-color all-classes-table all-classes-table-tab7"><a href="org/mapstruct/extensions/spring/ExternalConversion.html" title="annotation interface in org.mapstruct.extensions.spring">ExternalConversion</a></div>
66+
<div class="col-last even-row-color all-classes-table all-classes-table-tab7">
67+
<div class="block">Allows the specification of a conversion that is available via the <a href="https://docs.spring.io/spring/docs/6.0.0/javadoc-api/org/springframework/core/convert/ConversionService.html" title="class or interface in org.springframework.core.convert" class="external-link"><code>ConversionService</code></a>, but is <em>not</em>
68+
declared as a MapStruct mapper within the scope of the <a href="org/mapstruct/extensions/spring/SpringMapperConfig.html" title="annotation interface in org.mapstruct.extensions.spring"><code>SpringMapperConfig</code></a>.</div>
69+
</div>
70+
<div class="col-first odd-row-color all-classes-table all-classes-table-tab7"><a href="org/mapstruct/extensions/spring/SpringMapperConfig.html" title="annotation interface in org.mapstruct.extensions.spring">SpringMapperConfig</a></div>
71+
<div class="col-last odd-row-color all-classes-table all-classes-table-tab7">
12972
<div class="block">Marks a class or interface as configuration source for the Spring extension.</div>
130-
</th>
131-
</tr>
132-
</table>
133-
</li>
134-
</ul>
73+
</div>
74+
</div>
13575
</div>
13676
</main>
137-
<footer role="contentinfo">
138-
<nav role="navigation">
139-
<!-- ======= START OF BOTTOM NAVBAR ====== -->
140-
<div class="bottomNav"><a id="navbar.bottom">
141-
<!-- -->
142-
</a>
143-
<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
144-
<a id="navbar.bottom.firstrow">
145-
<!-- -->
146-
</a>
147-
<ul class="navList" title="Navigation">
148-
<li><a href="org/mapstruct/extensions/spring/package-summary.html">Package</a></li>
149-
<li>Class</li>
150-
<li><a href="overview-tree.html">Tree</a></li>
151-
<li><a href="deprecated-list.html">Deprecated</a></li>
152-
<li><a href="index-all.html">Index</a></li>
153-
<li><a href="help-doc.html">Help</a></li>
154-
</ul>
15577
</div>
156-
<div class="subNav">
157-
<ul class="navList" id="allclasses_navbar_bottom">
158-
<li><a href="allclasses.html">All&nbsp;Classes</a></li>
159-
</ul>
160-
<div>
161-
<script type="text/javascript"><!--
162-
allClassesLink = document.getElementById("allclasses_navbar_bottom");
163-
if(window==top) {
164-
allClassesLink.style.display = "block";
165-
}
166-
else {
167-
allClassesLink.style.display = "none";
168-
}
169-
//-->
170-
</script>
171-
<noscript>
172-
<div>JavaScript is disabled on your browser.</div>
173-
</noscript>
17478
</div>
175-
<a id="skip.navbar.bottom">
176-
<!-- -->
177-
</a></div>
178-
<!-- ======== END OF BOTTOM NAVBAR ======= -->
179-
</nav>
180-
</footer>
18179
</body>
18280
</html>

static/documentation/spring-extensions/api/annotations/allclasses.html

Lines changed: 0 additions & 33 deletions
This file was deleted.

0 commit comments

Comments
 (0)