|
| 1 | +--- |
| 2 | +description: An argument converter using the Spring Framework type conversion |
| 3 | +--- |
| 4 | + |
| 5 | +# `@SpringConversion` |
| 6 | + |
| 7 | +`@SpringConversion` is an annotation that converts instances using the |
| 8 | +[type conversion](https://docs.spring.io/spring-framework/reference/core/validation/convert.html) |
| 9 | +provided by the Spring Framework: |
| 10 | + |
| 11 | +``` java |
| 12 | +--8<-- |
| 13 | +SpringConversionDemo.java:import |
| 14 | +SpringConversionDemo.java:test |
| 15 | +--8<-- |
| 16 | +``` |
| 17 | + |
| 18 | +The converter delegates the conversion to the |
| 19 | +[`DefaultConversionService`](https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/core/convert/support/DefaultConversionService.html), |
| 20 | +which provides a wide range of built-in converters for common Java types, including: |
| 21 | + |
| 22 | +* Primitives and their wrappers |
| 23 | +* Arrays |
| 24 | +* Collections (`List`, `Set`, `Map`, etc.) |
| 25 | +* Enums |
| 26 | +* Common value types (`UUID`, `Currency`, `Locale`, etc.) |
| 27 | + |
| 28 | +## Requirements |
| 29 | + |
| 30 | +The annotation requires `spring-core` available in the test classpath: |
| 31 | + |
| 32 | +=== ":simple-apachemaven: Maven" |
| 33 | + |
| 34 | + ``` xml |
| 35 | + <dependency> |
| 36 | + <groupId>org.springframework</groupId> |
| 37 | + <artifactId>spring-core</artifactId> |
| 38 | + <version>${spring-framework.version}</version> |
| 39 | + <scope>test</scope> |
| 40 | + </dependency> |
| 41 | + ``` |
| 42 | + |
| 43 | +=== ":simple-gradle: Gradle" |
| 44 | + |
| 45 | + ``` kotlin |
| 46 | + testImplementation("org.springframework:spring-core:${springFrameworkVersion}") |
| 47 | + ``` |
| 48 | + |
| 49 | +However, declaring this dependency is generally not required in a Spring application. |
| 50 | + |
| 51 | +## Examples |
| 52 | + |
| 53 | +The following sections demonstrate some of the possible conversions. For a complete list of supported conversions, |
| 54 | +refer to the Spring Framework reference documentation. |
| 55 | + |
| 56 | +### Array → Array |
| 57 | + |
| 58 | +| Source Type | Target Declaration | Example | |
| 59 | +|-------------------|----------------------------------|--------------------------------------------------------------------------| |
| 60 | +| `#!java String[]` | `#!java @SpringConversion int[]` | `#!java new String[] { "123", "456" }` → `#!java new int[] { 123, 456 }` | |
| 61 | + |
| 62 | + |
| 63 | +### Array → Collection |
| 64 | + |
| 65 | +| Source Type | Target Declaration | Example | |
| 66 | +|-----------------------|------------------------------------------|---------------------------------------------------------------------| |
| 67 | +| `#!java int[]` | `#!java @SpringConversion List<Integer>` | `#!java new int[] { 123, 456 }` → `#!java List.of(123, 456)` | |
| 68 | +| `#!java Integer[]` | `#!java @SpringConversion List<Integer>` | `#!java new Integer[] { 123, 456 }` → `#!java List.of(123, 456)` | |
| 69 | +| `#!java String[]` | `#!java @SpringConversion List<Integer>` | `#!java new String[] { "123", "456" }` → `#!java List.of(123, 456)` | |
| 70 | + |
| 71 | +### Array → Object |
| 72 | + |
| 73 | +| Source Type | Target Declaration | Example | |
| 74 | +|--------------------|--------------------------------|-------------------------------------------------------| |
| 75 | +| `#!java int[]` | `#!java @SpringConversion int` | `#!java new int[] { 123, 456 }` → `#!java 123` | |
| 76 | +| `#!java Integer[]` | `#!java @SpringConversion int` | `#!java new Integer[] { 123, 456 }` → `#!java 123` | |
| 77 | +| `#!java String[]` | `#!java @SpringConversion int` | `#!java new String[] { "123", "456" }` → `#!java 123` | |
| 78 | + |
| 79 | +### Array → String |
| 80 | + |
| 81 | +| Source Type | Target Declaration | Example | |
| 82 | +|--------------------|-----------------------------------|-------------------------------------------------------------| |
| 83 | +| `#!java int[]` | `#!java @SpringConversion String` | `#!java new int[] { 123, 456 }` → `#!java "123,456"` | |
| 84 | +| `#!java Integer[]` | `#!java @SpringConversion String` | `#!java new Integer[] { 123, 456 }` → `#!java "123,456"` | |
| 85 | +| `#!java String[]` | `#!java @SpringConversion String` | `#!java new String[] { "123", "456" }` → `#!java "123,456"` | |
| 86 | + |
| 87 | +### Collection → Collection |
| 88 | + |
| 89 | +| Source Type | Target Declaration | Example | |
| 90 | +|-----------------------|------------------------------------------|-------------------------------------------------------------| |
| 91 | +| `#!java List<String>` | `#!java @SpringConversion List<Integer>` | `#!java List.of("123", "456")` → `#!java List.of(123, 456)` | |
| 92 | + |
| 93 | +### Map → Map |
| 94 | + |
| 95 | +| Source Type | Target Declaration | Example | |
| 96 | +|------------------------------|-------------------------------------------------|-------------------------------------------------------------------------------| |
| 97 | +| `#!java Map<String, String>` | `#!java @SpringConversion Map<Integer, Double>` | `#!java Map.of("1", "123", "2", "456")` → `#!java Map.of(1, 123.0, 2, 456.0)` | |
| 98 | + |
| 99 | +### String → Collection |
| 100 | + |
| 101 | +| Source Type | Target Declaration | Example | |
| 102 | +|-----------------------|------------------------------------------|---------------------------------------------------------------------| |
| 103 | +| `#!java String` | `#!java @SpringConversion List<Integer>` | `#!java "123, 456"` → `#!java List.of(123, 456)` | |
0 commit comments