mirror of
https://github.com/mapstruct/mapstruct.git
synced 2025-07-12 00:00:08 +08:00
#3112 Document <THROW_EXCEPTION> in the reference guide
This commit is contained in:
parent
a67e4e5f96
commit
53baf96126
@ -65,7 +65,7 @@ public class OrderMapperImpl implements OrderMapper {
|
|||||||
----
|
----
|
||||||
====
|
====
|
||||||
By default an error will be raised by MapStruct in case a constant of the source enum type does not have a corresponding constant with the same name in the target type and also is not mapped to another constant via `@ValueMapping`. This ensures that all constants are mapped in a safe and predictable manner. The generated
|
By default an error will be raised by MapStruct in case a constant of the source enum type does not have a corresponding constant with the same name in the target type and also is not mapped to another constant via `@ValueMapping`. This ensures that all constants are mapped in a safe and predictable manner. The generated
|
||||||
mapping method will throw an IllegalStateException if for some reason an unrecognized source value occurs.
|
mapping method will throw an `IllegalStateException` if for some reason an unrecognized source value occurs.
|
||||||
|
|
||||||
MapStruct also has a mechanism for mapping any remaining (unspecified) mappings to a default. This can be used only once in a set of value mappings and only applies to the source. It comes in two flavors: `<ANY_REMAINING>` and `<ANY_UNMAPPED>`. They cannot be used at the same time.
|
MapStruct also has a mechanism for mapping any remaining (unspecified) mappings to a default. This can be used only once in a set of value mappings and only applies to the source. It comes in two flavors: `<ANY_REMAINING>` and `<ANY_UNMAPPED>`. They cannot be used at the same time.
|
||||||
|
|
||||||
@ -75,14 +75,18 @@ MapStruct will *not* attempt such name based mapping for `<ANY_UNMAPPED>` and di
|
|||||||
|
|
||||||
MapStruct is able to handle `null` sources and `null` targets by means of the `<NULL>` keyword.
|
MapStruct is able to handle `null` sources and `null` targets by means of the `<NULL>` keyword.
|
||||||
|
|
||||||
|
In addition, the constant value `<THROW_EXCEPTION>` can be used for throwing an exception for particular value mappings. This value is only applicable to `ValueMapping#target()` and not `ValueMapping#source()` since MapStruct can't map from exceptions.
|
||||||
|
|
||||||
[TIP]
|
[TIP]
|
||||||
====
|
====
|
||||||
Constants for `<ANY_REMAINING>`, `<ANY_UNMAPPED>` and `<NULL>` are available in the `MappingConstants` class.
|
Constants for `<ANY_REMAINING>`, `<ANY_UNMAPPED>`, `<THROW_EXCEPTION>` and `<NULL>` are available in the `MappingConstants` class.
|
||||||
====
|
====
|
||||||
|
|
||||||
Finally `@InheritInverseConfiguration` and `@InheritConfiguration` can be used in combination with `@ValueMappings`. `<ANY_REMAINING>` and `<ANY_UNMAPPED>` will be ignored in that case.
|
Finally `@InheritInverseConfiguration` and `@InheritConfiguration` can be used in combination with `@ValueMappings`. `<ANY_REMAINING>` and `<ANY_UNMAPPED>` will be ignored in that case.
|
||||||
|
|
||||||
.Enum mapping method, <NULL> and <ANY_REMAINING>
|
The following code snippets exemplify the use of the aforementioned constants.
|
||||||
|
|
||||||
|
.Enum mapping method, `<NULL>` and `<ANY_REMAINING>`
|
||||||
====
|
====
|
||||||
[source, java, linenums]
|
[source, java, linenums]
|
||||||
[subs="verbatim,attributes"]
|
[subs="verbatim,attributes"]
|
||||||
@ -102,7 +106,7 @@ public interface SpecialOrderMapper {
|
|||||||
----
|
----
|
||||||
====
|
====
|
||||||
|
|
||||||
.Enum mapping method result, <NULL> and <ANY_REMAINING>
|
.Enum mapping method result, `<NULL>` and `<ANY_REMAINING>`
|
||||||
====
|
====
|
||||||
[source, java, linenums]
|
[source, java, linenums]
|
||||||
[subs="verbatim,attributes"]
|
[subs="verbatim,attributes"]
|
||||||
@ -137,6 +141,55 @@ public class SpecialOrderMapperImpl implements SpecialOrderMapper {
|
|||||||
*Note:* MapStruct would have refrained from mapping the `RETAIL` and `B2B` when `<ANY_UNMAPPED>` was used instead of `<ANY_REMAINING>`.
|
*Note:* MapStruct would have refrained from mapping the `RETAIL` and `B2B` when `<ANY_UNMAPPED>` was used instead of `<ANY_REMAINING>`.
|
||||||
|
|
||||||
|
|
||||||
|
.Enum mapping method with `<THROW_EXCEPTION>`
|
||||||
|
====
|
||||||
|
[source, java, linenums]
|
||||||
|
[subs="verbatim,attributes"]
|
||||||
|
----
|
||||||
|
@Mapper
|
||||||
|
public interface SpecialOrderMapper {
|
||||||
|
|
||||||
|
SpecialOrderMapper INSTANCE = Mappers.getMapper( SpecialOrderMapper.class );
|
||||||
|
|
||||||
|
@ValueMappings({
|
||||||
|
@ValueMapping( source = "STANDARD", target = "DEFAULT" ),
|
||||||
|
@ValueMapping( source = "C2C", target = MappingConstants.THROW_EXCEPTION )
|
||||||
|
})
|
||||||
|
ExternalOrderType orderTypeToExternalOrderType(OrderType orderType);
|
||||||
|
}
|
||||||
|
----
|
||||||
|
====
|
||||||
|
|
||||||
|
.Enum mapping method with `<THROW_EXCEPTION>` result
|
||||||
|
====
|
||||||
|
[source, java, linenums]
|
||||||
|
[subs="verbatim,attributes"]
|
||||||
|
----
|
||||||
|
// GENERATED CODE
|
||||||
|
public class SpecialOrderMapperImpl implements SpecialOrderMapper {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ExternalOrderType orderTypeToExternalOrderType(OrderType orderType) {
|
||||||
|
if ( orderType == null ) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
ExternalOrderType externalOrderType;
|
||||||
|
|
||||||
|
switch ( orderType ) {
|
||||||
|
case STANDARD: externalOrderType = ExternalOrderType.DEFAULT;
|
||||||
|
break;
|
||||||
|
case C2C: throw new IllegalArgumentException( "Unexpected enum constant: " + orderType );
|
||||||
|
default: throw new IllegalArgumentException( "Unexpected enum constant: " + orderType );
|
||||||
|
}
|
||||||
|
|
||||||
|
return externalOrderType;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
----
|
||||||
|
====
|
||||||
|
|
||||||
|
|
||||||
[WARNING]
|
[WARNING]
|
||||||
====
|
====
|
||||||
The mapping of enum to enum via the `@Mapping` annotation is *DEPRECATED*. It will be removed from future versions of MapStruct. Please adapt existing enum mapping methods to make use of `@ValueMapping` instead.
|
The mapping of enum to enum via the `@Mapping` annotation is *DEPRECATED*. It will be removed from future versions of MapStruct. Please adapt existing enum mapping methods to make use of `@ValueMapping` instead.
|
||||||
@ -152,6 +205,7 @@ MapStruct supports enum to a String mapping along the same lines as is described
|
|||||||
2. Similarity: `<ANY_UNMAPPED`> stops after handling defined mapping and proceeds to the switch/default clause value.
|
2. Similarity: `<ANY_UNMAPPED`> stops after handling defined mapping and proceeds to the switch/default clause value.
|
||||||
3. Difference: `<ANY_REMAINING>` will result in an error. It acts on the premise that there is name similarity between enum constants in source and target which does not make sense for a String type.
|
3. Difference: `<ANY_REMAINING>` will result in an error. It acts on the premise that there is name similarity between enum constants in source and target which does not make sense for a String type.
|
||||||
4. Difference: Given 1. and 3. there will never be unmapped values.
|
4. Difference: Given 1. and 3. there will never be unmapped values.
|
||||||
|
5. Similarity: `THROW_EXCEPTION` can be used for throwing an exception for particular enum values.
|
||||||
|
|
||||||
*`String` to enum*
|
*`String` to enum*
|
||||||
|
|
||||||
@ -159,6 +213,7 @@ MapStruct supports enum to a String mapping along the same lines as is described
|
|||||||
2. Similarity: `<ANY_UNMAPPED`> stops after handling defined mapping and proceeds to the switch/default clause value.
|
2. Similarity: `<ANY_UNMAPPED`> stops after handling defined mapping and proceeds to the switch/default clause value.
|
||||||
3. Similarity: `<ANY_REMAINING>` will create a mapping for each target enum constant and proceed to the switch/default clause value.
|
3. Similarity: `<ANY_REMAINING>` will create a mapping for each target enum constant and proceed to the switch/default clause value.
|
||||||
4. Difference: A switch/default value needs to be provided to have a determined outcome (enum has a limited set of values, `String` has unlimited options). Failing to specify `<ANY_REMAINING>` or `<ANY_UNMAPPED`> will result in a warning.
|
4. Difference: A switch/default value needs to be provided to have a determined outcome (enum has a limited set of values, `String` has unlimited options). Failing to specify `<ANY_REMAINING>` or `<ANY_UNMAPPED`> will result in a warning.
|
||||||
|
5. Similarity: `THROW_EXCEPTION` can be used for throwing an exception for any arbitrary `String` value.
|
||||||
|
|
||||||
=== Custom name transformation
|
=== Custom name transformation
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user