#4105·mapstruct

Strategy to check at runtime the null value with JSpecifiy

Author: pkernevezCreated Aug 4, 2026Updated Aug 20, 2026

Use case

We have field that are null at object creation but a never null right after. Example the field Id or CreatedAt on an entity. The field are nullable but on the ReadDto these field are not null.

I would like to be able to check at runtime that the field is not null with Objects.requireNonNull(...). It could be a new strategy for the mapping.

It may be possible with something like that: @Mapping(target = "createdAt", nullValueCheckStrategy = NullValueCheckStrategy.AT_RUNTIME)

Generated Code

Having:

java
    @Override
    public ChangeRequestReadSimpleDto toChangeRequestDto2(ChangeRequest cr) {
        ShiftRawId id = null;
        ChangeRequestTypeDto type = null;
        OffsetDateTime createdAt = null;
        
        id = toRawShiftId(Objects.requireNonNull(cr.getId()));
        type = convertEnum( cr.getType() );
        OffsetDateTime createdAt = toOffsetTime(Objects.requireNonNull(cr.getCreatedAt()));
        return new ChangeRequestReadSimpleDto(id, type, createdAt);
    }

Instead of:

java
    @Override
    public ChangeRequestReadSimpleDto toChangeRequestDto2(ChangeRequest cr) {
        ShiftRawId id = null;
        ChangeRequestTypeDto type = null;
        OffsetDateTime createdAt = null;
        
        id = toRawShiftId(cr.getId()); // Error cr.getId() is nullable
        type = convertEnum( cr.getType() );
        OffsetDateTime createdAt = toOffsetTime(cr.getCreatedAt()); // Error cr.getCreatedAt() is nullable
        return new ChangeRequestReadSimpleDto(id, type, createdAt);
    }

Possible workarounds

Define a custom mapping with the expression:

java
    @Mapping(target = "createdAt", expression = "java(toOffsetTime(java.util.Objects.requireNonNull(cr.getCreatedAt())))")

MapStruct Version

1.7.0.Beta2