微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

模型映射器异常:仅在Docker中无法将java.lang.String转换为java.lang.Integer

如何解决模型映射器异常:仅在Docker中无法将java.lang.String转换为java.lang.Integer

将DTO转换为实体时,我面临NumberFormatException。尽管我在DTO和Entity中遇到异常的字段都是String。

奇怪的是,仅当我在docker上部署应用程序时,我才得到该异常。如果我以独立方式运行应用程序,那么一切都很好。

下面是我的代码

UserDTO:

@JsonInclude(JsonInclude.Include.NON_NULL)
public class UserDto {
   private Integer userId;

   private String displayCode;

   private String firstName;

   private String lastName;

   private String username;

   private String password;

   private String email;

   private String phone;

   private String photo;

   private Short title;

   private String npi;

   private List<Integer> postNominal;

   @JsonProperty("isDoctor")
   private Boolean isDoctor;

   private Integer userType;

   private Boolean active;

   private Boolean agreementActive;

   private String accessCode;

   private Integer createdBy;

   private Timestamp createdTimestamp;

   private Integer updatedBy;

   private Timestamp updatedTimestamp;

   private List<RoleDto> roles;

   private Integer departmentId;

   private UserDto reportingTo;

   @JsonIgnore
   private String partnerdisplayCode;

   @JsonProperty("userRoles")
   private String userRole;

   private String  base64Image;

   getters...
   setters...

}

UserEntity:

 @Entity
 @Table(name = "user",schema = "user_management")
 public class UserEntity extends BaseEntity implements Serializable {
     private static final long serialVersionUID = 1L;

     @Id
     @GeneratedValue(strategy = GenerationType.IDENTITY)
     @Column(name = "user_id")
     private Integer userId;

     @Column(name = "display_code")
     private String displayCode;

     @Column(name = "user_type")
     private Short userType;

     @Column(name = "first_name")
     private String firstName;

     @Column(name = "last_name")
     private String lastName;

     @Column(name = "username")
     private String username;

     @Column(name = "password")
     private String password;

     @Column(name = "email")
     private String email;

     @Column(name = "phone")
     private String phone;

     @Column(name = "photo")
     private String photo;

     @Column(name = "title")
     private Short title;

     @Column(name = "npi")
     private String npi;

     @Column(name = "department_id")
     private Integer departmentId;

     @Column(name = "is_doctor")
     private Short isDoctor;

     @Column(name = "agreement_active")
     private Short agreementActive;

     @Column(name = "access_code")
     private String accessCode;

     @Column(name = "status")
     private Short active;

     getters ....
     setters
 }

UserService类:

@Override
@Transactional
public UserDto persist(UserWithDependenciesDto user) {
    modelmapper.getConfiguration().setSkipNullEnabled(true);
    modelmapper.addConverter(CommonUtil.BOOLEAN_SHORT_CONVERTER);
    UserEntity userEntity = modelmapper.map(user.getUser(),UserEntity.class);
     ....
}

@postconstruct
public void initializemodelmapperStrategy() {
    this.modelmapper.getConfiguration().setAmbiguityIgnored(true);
    this.modelmapper.getConfiguration()
                      .setMatchingStrategy(MatchingStrategies.STRICT);
}

UserWithDependenciesDto:

 public class UserWithDependenciesDto {
      @JsonProperty("partnerId")
      private Integer partnerId;
      @JsonProperty("user")
      private  UserDto user;
      @JsonProperty("createdBy")
      private  Integer createdBy;
     .... 
 }

例外:

org.modelmapper.MappingException: modelmapper mapping errors:
nglis-usrm-api_1  | 
nglis-usrm-api_1  | 1) Converter org.modelmapper.internal.converter.NumberConverter@e822ec7 
Failed to convert java.lang.String to java.lang.Integer.
nglis-usrm-api_1  | Caused by: org.modelmapper.MappingException: modelmapper mapping errors:
nglis-usrm-api_1  | 
nglis-usrm-api_1  | 1) Error mapping AJ01 to java.lang.Integer
nglis-usrm-api_1  | 
nglis-usrm-api_1  | 1 error
nglis-usrm-api_1  |     at 
org.modelmapper.internal.Errors.toMappingException(Errors.java:258)
nglis-usrm-api_1  |     at 
org.modelmapper.internal.converter.NumberConverter.numberFor(NumberConverter.java:181)
nglis-usrm-api_1  |     at 
org.modelmapper.internal.converter.NumberConverter.convert(NumberConverter.java:75)
nglis-usrm-api_1  |     at 
org.modelmapper.internal.converter.NumberConverter.convert(NumberConverter.java:57)
nglis-usrm-api_1  |     at 
org.modelmapper.internal.MappingEngineImpl.convert(MappingEngineImpl.java:303)
nglis-usrm-api_1  |     at 
org.modelmapper.internal.MappingEngineImpl.map(MappingEngineImpl.java:110)
nglis-usrm-api_1  |     at 
org.modelmapper.internal.MappingEngineImpl.setDestinationValue(MappingEngineImpl.java:242)
nglis-usrm-api_1  |     at 
org.modelmapper.internal.MappingEngineImpl.propertyMap(MappingEngineImpl.java:188)
nglis-usrm-api_1  |     at 
org.modelmapper.internal.MappingEngineImpl.typeMap(MappingEngineImpl.java:152)
nglis-usrm-api_1  |     at 
org.modelmapper.internal.MappingEngineImpl.map(MappingEngineImpl.java:106)
nglis-usrm-api_1  |     at 
org.modelmapper.internal.MappingEngineImpl.map(MappingEngineImpl.java:72)
nglis-usrm-api_1  |     at org.modelmapper.modelmapper.mapInternal(modelmapper.java:573)
nglis-usrm-api_1  |     at org.modelmapper.modelmapper.map(modelmapper.java:406)
nglis-usrm-api_1  |     at 
com.sip.nglis.partneruser.manager.impl.UserManagerImpl.persist(UserManagerImpl.java:61)
nglis-usrm-api_1  |     at 
com.sip.nglis.partneruser.manager.impl.UserManagerImpl$$FastClassBySpringcglib$$c52d9382
.invoke( 
 <generated>)
nglis-usrm-api_1  |     at 
org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
nglis-usrm-api_1  |     at 

Json:

{
"data":{
  "partnerId":1,"user":{
     "userId":0,"displayCode":"BC410","firstName":"Ikram","lastName":"Sardar Khan","username":"dsfsdf342423","password":"dsfsdfg","email":"gdfgdf423423423@siparadigm.com","phone":"03456789010","title":2,"npi":"ghgrere4234qweas","postNominal":[
        1,2
     ],"userType":1,"active":true,"agreementActive":true,"accessCode":"AJ01",**This is the place where I'm getting the number format exception. **
     "createdBy":1,"createdTimestamp":1600780421007,"roles":[
        {
           "createdBy":1,"createdTimestamp":1600640026453,"roleUId":2,"roleUType":1,"name":"Partner Admin","status":true,"isSystemOnly":0,"isClientRole":0,"isPhysician":false
        },{
           "createdBy":1,"roleUId":3,"name":"CRM","isPhysician":true
        }
     ],"isDoctor":false
  },"createdBy":1

} }

我在UserDto和Entity中的AccessCode上遇到数字格式异常。您将在两边都看到它是String。

解决方法

好的,这是非常有线的。模型映射器以某种方式将其策略从“严格”更改为“宽松”。尽管在后期构造中,到达目标对象的绘制位置时严格,但策略是宽松的。

所以我要做的是删除后构造注释,并在发生转换的地方调用该方法。因此在转换过程中,该策略变得严格,上述问题得以解决。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。