我正在研究一个springboot应用程序,它公开了一些不返回原始实体的endpoint,但它们返回了它们的DTO。为了映射所有的实体,我使用org.modelmapper
version:2.3.8和project Lombok来避免实现getters、setters和其他一些实用程序。
这些是源实体(我删除了一些属性和Hibernate注释,因为它们在示例中不是必需的):
user.java
@NoArgsConstructor
@AllArgsConstructor
@ToString
@Getter
@Setter
@Entity(name = "Users")
@ApiModel(description = "All details about user")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "User_Type", discriminatorType= DiscriminatorType.STRING)
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "user_type")
@JsonSubTypes({
@JsonSubTypes.Type(value = Player.class, name = "player"), //non-abstract subtypes of your abstract class
@JsonSubTypes.Type(value = Coach.class, name = "coach") })
public class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String firstName;
private String lastName;
private String username;
private String email;
private String password;
private String contactNumber;
}
Player.java
@NoArgsConstructor
@AllArgsConstructor
@ToString
@Getter
@Setter
@Entity(name = "Players")
@DiscriminatorValue(value = "player")
@DiscriminatorOptions(force=true)
public class Player extends User {
private String dateOfBirth;
private String notes;
}
Coach.java
@Entity(name = "Coaches")
@DiscriminatorValue(value = "coach")
@DiscriminatorOptions(force=true)
public class Coach extends User{
}
目标DTO为:
userDTo.java
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@ToString
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "User_Type", discriminatorType= DiscriminatorType.STRING)
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "user_type")
@JsonSubTypes({
@JsonSubTypes.Type(value = PlayerDto.class, name = "player"), //non-abstract subtypes of your abstract class
@JsonSubTypes.Type(value = CoachDto.class, name = "coach") })
public abstract class UserDto {
private String firstName;
private String lastName;
private String username;
private String email;
private String password;
private String contactNumber;
private String dateOfBirth;
private String notes;
}
PlayerDTo.java
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@ToString
@DiscriminatorValue(value = "player")
@DiscriminatorOptions(force=true)
public class PlayerDto extends UserDto{
private String dateOfBirth;
private String notes;
}
Coach.java
@DiscriminatorValue(value = "coach")
@DiscriminatorOptions(force=true)
public class CoachDto extends UserDto{
}
UserController.java
@PostMapping("/users")
public void addUsers(@RequestBody List<UserDto> newUsersDto) {
userService.saveUsers(newUsersDto);
}
UserService.java
public void saveUsers(List<UserDto> newUsersDto) {
List<User> userList = Arrays.asList(modelMapper.map(newUsersDto, User.class));
userRepository.saveAll(userList);
}
我试图通过使用Postman发送JSON来创建一个新用户。我正在发送一个用户列表,因为我希望能够一次保存多个用户,并且我正在尝试将其映射为
modelmapper.map(newUsersDto,user.class)
但我得到以下错误:
“ModelMapper映射错误:\n\n1)无法实例化目标com.app.entity.user的实例。请确保com.app.entity.user具有非私有的无参数构造函数。\n\n1错误”
我不知道什么是映射子类的最佳方法。
我不知道Lombok,但基于一个快速的谷歌搜索,添加@noargsconstructor难道不会解决这一点吗?
我正在使用Spring并在“mapper”字段的第一个控制器中遇到问题: 上下文初始化期间遇到异常-取消刷新尝试:org。springframework。豆。工厂UnsatisfiedPendencyException:创建名为“controller”的bean时出错:未满足的依赖项通过字段“mapper”表示;嵌套的异常是org。springframework。豆。工厂BeanCreationE
我正在将应用程序迁移到最新的spring boot版本(使用gradle spring boot dependencies和2.5.4版)。 我有一个名为的实体,它用注释;以及另一个实体,用注释。Customer类有
我试图在谷歌地图中显示一个位置地址,但当我为获取地址启动意向服务时,它将显示错误“无法实例化服务”。 我使用此链接显示位置地址。 这是我的代码: 在这里我开始意图服务:
我的问题和Mockito一样:Mock私有字段初始化,但是对于Google Mock框架。简而言之: 在为类进行单元测试时,如何模拟实例?
问题内容: 我迷失在通用丛林中,请帮助我:)我有这样的事情: 据我认为,编译器应该实现,因为它实现了。 为什么会出现此错误? 我该如何工作? ps:如果您对此有更好的标题,请进行更改。我无法弥补。 问题答案: 问题是,您的构造函数需要一个,并且在您的代码中将其推断为。 因此,您应该通过,然后通过。但是您不能像那样直接传递该实例。 但是,您可以通过将类强制转换为所需实例来解决此问题: 请注意,如何首
鉴于 IntelliJ IDEA 2016.1.1报告“可以替换为方法引用”。 我知道无参数构造函数的< code>Foo::new语法,但是不知道如何将< code>foo作为参数传入。我肯定漏掉了什么。