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
|
||||
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.
|
||||
|
||||
@ -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.
|
||||
|
||||
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]
|
||||
====
|
||||
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.
|
||||
|
||||
.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]
|
||||
[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]
|
||||
[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>`.
|
||||
|
||||
|
||||
.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]
|
||||
====
|
||||
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.
|
||||
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.
|
||||
5. Similarity: `THROW_EXCEPTION` can be used for throwing an exception for particular enum values.
|
||||
|
||||
*`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.
|
||||
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.
|
||||
5. Similarity: `THROW_EXCEPTION` can be used for throwing an exception for any arbitrary `String` value.
|
||||
|
||||
=== Custom name transformation
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user