java - 大家好,我面临一些映射异常。我知道这是因为课堂上的不同领域,请提出一些克服它的方法
问题描述
这是我用来存储来自 UI 的值的 UserDTO 类。
public class UserDTO {
private String emailId;
private String password;
private String role;
// getters and setters
}
这是处理数据库的实体类(我正在使用休眠)。
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
}
以下是具有字符串角色字段的 RoleEntity 类。
public class RoleEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "role_id")
private int id;
@Column(name = "role")
private String role;
// getters and setters
}
我从请求正文中的 UI 获取用户值。
@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。我正在使用推土机映射器映射方法将 DTO 映射到实体。 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
解决方案
这是因为在你UserDTO.java
的角色String
中UserEntity.java
,角色类型是RoleEntity
. 您不能将 String 映射到RoleEntity
. 但是,在映射文件中,您可以从映射中排除角色字段,例如:
<class-a>UserDTO</class-a>
<class-b>UserEntity</class-b>
<field-exclude>
<a>role</a>
<b>role</b>
</field-exclude>
PS:填写全限定类名。
然后您可以手动创建RoleEntity
并将其设置为角色UserEntity
推荐阅读
- next.js - Next.js 缓存对 `getStaticPaths` 和 `getStaticProps` 中使用的数据库的请求以缩短构建时间
- git - 如何在给定 git 中的旧路径的情况下找到文件的当前位置
- qt - QML/Qt 渐变图
- php - 已选择字段的联系表格 7 简码
- java - Spring Boot 2 应用程序在 docker-maven-plugin 触发的 docker 容器内运行时无法连接到 mysql
- git - 在 makefile 中运行任何 git 命令的权限错误
- javascript - 提供静态内容和设置 cookie
- sql - 如何使用每个客户的最新状态更新提取数据
- angular - 即使用户已经登录,身份验证保护也会阻止访问
- moodle - 为 EditUser 编辑面包屑