Это мой класс UserDTO, который я использую для хранения значений, поступающих из пользовательского интерфейса.
public class UserDTO {
private String emailId;
private String password;
private String role;
// getters and setters
}
И это класс Entity, который имеет дело с базой данных (я использую hibernate).
public class UserEntity {
@Id
@Column(name = "EmailId")
private String emailId;
@Column(name = "Password")
private String password;
@ManyToOne
@JoinColumn(name = "role_id", nullable = false)
RoleEntity role;
// getters and setters
}
И следующий класс RoleEntitity, имеющий строковое поле роли.
public class RoleEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "role_id")
private int id;
@Column(name = "role")
private String role;
// getters and setters
}
Я получаю пользовательские значения из пользовательского интерфейса в теле запроса.
@RequestMapping(value = "/createUser", method = RequestMethod.POST, produces= {"application/json"})
public ResponseEntity<String> createUser(@RequestBody UserDTO userDTO) {
return new ResponseEntity<String>(adminService.createUser(userDTO), HttpStatus.CREATED);
}
Здесь я хочу отобразить роль из UserDTO в RoleEntity. Я использую метод карты dozer mapper для отображения DTO в Entity.
dozerMapper является объектом DozerBeanMapper .
userDTO является объектом UserDTO
и userEntity объект UserEntity .
//In createUser(UserDTO userDTO)
dozerMapper.map(userDTO, userEntity);
Ошибка:
MapId: null
Type: null
Source parent class: com.iiminds.crm.dto.UserDTO
Source field name: role
Source field type: class java.lang.String
Source field value: Admin
Dest parent class: com.iiminds.crm.entity.UserEntity
Dest field name: role
Dest field type: com.iiminds.crm.entity.RoleEntity
org.dozer.MappingException: Illegal object type for the method 'setRole'.
Expected types:
com.iiminds.crm.entity.RoleEntity
Actual types:
java.lang.String
2018-10-29 16:15:39.229 ERROR 11516 --- [nio-8080-exec-1] o.a.c.c.C.[.[.[.[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [/crm] threw exception [Request processing failed; nested exception is org.dozer.MappingException: Illegal object type for the method 'setRole'.
Expected types:
com.iiminds.crm.entity.RoleEntity
Actual types:
java.lang.String] with root cause