>source

값이 null이면 json 페이로드가 변경되는 상황이 있습니다.

예를 들어 다음 날짜 개체에는 세 개의 개체(년, 월, 일)가 있습니다. "day"와 같은 데이터가 없으면 'value'가 표시되지 않고 null만 됩니다.

"date":{
  "year":{
     "value":"2021"
  },
  "month":{
     "value":"09"
  },
  "day":null
 }

이 null을 확인하기 위해 여러 가지 if 조건이 있었지만 그렇게 좋지는 않았습니다. 너무 많은 iffs..like 20이었습니다.

이제 ModelMapper를 사용하려고 합니다.

이것이 제가 지금까지 가지고 있는 것입니다. 나는 상자에서 나온 속성 중 일부가 null을 처리하지만 null일 때 페이로드가 변경되기 때문에 그렇지 않은 것 같습니다.

private static MyDto mapData(Info info) {
ModelMapper modelMapper= new ModelMapper();   //relace --MyCustomizedMapper
modelMapper.getConfiguration()
.setMatchingStrategy(MatchingStrategies.STRICT)
.setDeepCopyEnabled(true)
.setPropertyCondition(Conditions.isNotNull());
var mappedDto= modelMapper.map(info, MyDto.class);
mappedDto.setDay(info.getDay().getValue());
}
return mappedDto
//nullPointerException is thrown because getDay is null

그래서 null을 확인하는 맞춤형 매퍼를 사용해 보았습니다.

public class MyCustomizedMapper extends ModelMapper{
@Override
public <D> D map(Object source, Class<D> destinationType) {
 Object tmpSource= source;
  if(source== null){
  tmpSource= new Object();
  }
  return super.map(tmpSource, destinationType);
 }
}

하지만 여전히 null 포인터 예외가 발생합니다.

모델 매퍼 사이트에서 이 code를 만났고 이제 when(notNull) 조건을 사용하려고 합니다.

typeMap.addMappings(mapper -> mapper.when(notNull).map(Person::getName, PersonDTO::setName));

여기서 TypeMap을 사용하려고 하는 중...

TypeMap<Info, MyDto> typeMap=
    modelMapper.createTypeMap(Info.class, MyDto.class);
//Define the mappings on the type map
typeMap.addMappings(mapper -> {
  mapper.map(src -> src.getDay(),
      MyDto::setDay);
  mapper.when(Conditions.isNotNull()).skip(MyDto::setDay);
});

오류: 1) 조건부 건너뛰기 시 소스 속성을 제공해야 합니다. when().skip(sourceGetter, destinationSetter)를 대신 사용하십시오.

이 상황에서 어떻게 ModelMapper를 올바르게 사용합니까?

  • 답변 # 1

    단순히 구성해야 합니다.상태다음 경우에만 적용하는 al 매핑isNotNull조건이 일치합니다:

    TypeMap typeMap= modelMapper.createTypeMap(Info.class, MyDto.class);
    typeMap.addMappings(mapper -> {
        mapper.when(Condition.isNotNull()).map(Info::getDay, MyDto::setDay);
    });
    

  • 이전 javascript : Angular 6에서 pdf를 다운로드하는 Spring 부트 API를 호출하면 응답을 구문 분석할 수 없다는 오류가 발생합니다.
  • 다음 python : ZenDesk -AnyOne은 ZenDesk API에서 인증하는 방법을 알고 있습니다.