我使用DTO和modelMapper是为了不让某些字段可见。我有一个类别实体,可以有子类别
public class CategoryEntity {
@Id
@GeneratedValue(strategy= GenerationType.IDENTITY)
private Long id;
@Column(length = 30, nullable = false)
private String categoryKeyId;
@Column(nullable = false)
private String name;
@ManyToOne(optional = true, fetch = FetchType.LAZY)
@JoinColumn(name="parent_id", nullable=true)
private CategoryEntity parentCategory;
// allow to delete also subcategories
@OneToMany(mappedBy="parentCategory", cascade = CascadeType.ALL)
private List<CategoryEntity> subCategories;
}
创建类别时,我使用模型:
@Getter @Setter
public class CategoryRequestModel {
private String name;
private String parentCategoryKeyId;
}
在此模型中,我希望parentCategoryKeyId与父对象的categoryKeyId匹配。
例如,如果我创建了一个“顶级”类别:
{
"name": "topCategory"
}
它返回给我:
{
"categoryKeyId": "jUcpO27Ch2YrT2zkLr488Q435F8AKS",
"name": "topCategory",
"subCategories": null
}
当我这样做时:
{
"name": "sub",
"parentCategoryKeyId": "jUcpO27Ch2YrT2zkLr488Q435F8AKS"
}
在我的控制器中,我将其余对象传递给DTO层,该层调用服务:
public CategoryRestResponseModel createCategory(@RequestBody CategoryRequestModel categoryRequestModel) {
CategoryRestResponseModel returnValue = new CategoryRestResponseModel();
if( categoryRequestModel.getName().isEmpty())
throw new NullPointerException(ErrorMessages.MISSING_REQUIRED_FIELDS.getErrorMessage());
ModelMapper modelMapper = new ModelMapper();
CategoryDto categoryDto = modelMapper.map(categoryRequestModel, CategoryDto.class);
CategoryDto createdCategory = categoryService.createCategory(categoryDto);
returnValue = modelMapper.map(createdCategory, CategoryRestResponseModel.class);
return returnValue;
}
我的类别是基本的POJO:
@Getter @Setter
public class CategoryDto implements Serializable {
@Getter(AccessLevel.NONE)
private static final long serialVersionUID = 1L;
private String categoryKeyId;
private String parentCategoryKeyId;
private String name;
private CategoryDto parentCategory;
private List<CategoryDto> subCategories;
}
为我服务:
public CategoryDto createCategory(CategoryDto categoryDto) {
//1. Create an empty object to return
System.out.println("Hello World");
CategoryDto returnValue = new CategoryDto();
System.out.println("CategoryDto: " + categoryDto);
// check if category exists
if (categoryRepository.findByName(categoryDto.getName()) != null)
throw new ApplicationServiceException("Record already in Database");
ModelMapper modelMapper = new ModelMapper();
CategoryEntity categoryEntity = modelMapper.map(categoryDto, CategoryEntity.class);
// Generate categoryKeyId
String categoryKeyId = utils.generateCategoryKeyId(30);
categoryEntity.setCategoryKeyId(categoryKeyId);
System.out.println("categoryDto parentCategory: " + categoryDto.getParentCategory());
System.out.println("CategoryDto: " + categoryDto);
if(categoryDto.getParentCategoryKeyId() != null) {
CategoryEntity parentCategory = categoryRepository.findByCategoryKeyId(categoryDto.getParentCategoryKeyId());
categoryEntity.setParentCategory(parentCategory);
System.out.println("CategoryEntity: " + categoryEntity);
System.out.println("parentCategory: " + parentCategory);
}
CategoryEntity storedCategory = categoryRepository.save(categoryEntity);
returnValue = modelMapper.map(storedCategory, CategoryDto.class);
return returnValue;
}
我的问题是,我想保存的子类别和检索ID匹配的类别KeyId...
在数据库中,我的条目应该是这样的
我的第一个条目应该有:id=1-parent_id=null,category_key_id=jUcpO27Ch2YrT2zkLr488Q435F8AKS,name=topClass...AND: id=2-parent_id=1,category_key_id="另一个生成的密钥", name=sub
不幸的是,我只是保留了id、categorykeyid和名称。我从CategoryTo中删除了id,并获得:1)转换器组织。模型映射器。内部的转换器。NumberConverter@348fc3d8无法转换java。字符串转换为java。朗,朗。
我用一种“肮脏”的方式解决了它。我只是更改了条目中的对象并添加了一个长id。
它给了我:
@Getter @Setter
public class CategoryRequestModel {
private Long id;
private String name;
private String parentCategoryKeyId;
}
我想映射到产品字段,而不创建类 应该如何序列化和反序列化?
Navicat 会依源表或集合对字段类型和長度作出假设。你可以从下拉式菜单选择你所需的类型。 【提示】导入多个表或集合时,你可以从下拉式菜单选择其他表或集合。 如果你导入数据到现有的表或集合,你则需要手动映射源字段名到目标,或按住 Control 键并点按字段,然后选择“智慧匹配全部字段”、“按次序匹配全部字段”和“全部取消匹配”来进行快速匹配。 如果你透过 ODBC 导入,“条件式查询”按钮会打
我与ModelMapper框架有麻烦。请解释为什么我看到以下行为。 我在build.gradle有以下依赖性 和一个类客户: 我还有一个地图绘制工具: 还有一个测试 在fred()中,方法输出是非红色的“Customer{name=fred,age=40}”(“Customer{name=null,age=40}”)。你能解释一下为什么吗?为什么我在第一个方法中看不到输出“George”?
需要把 A 系统某一堆接口的字段, 映射到 B 系统的某一堆接口的字段, 其实涵义是一样的, 情况大致有这样一些 字段取名不一样 类型不一样 字符串日期对应Date日期 在A系统是一个字段, 对应B系统为两个字段 在A系统有,B系统没有 在A系统是平行结构, 在B 系统有类中类结构 感觉只能手动一个个去 set get , 有啥好的转换工具可以一次性转好的没, 像写一个配置文件一次性转好
我犯了一个错误,比如: 我知道在堆栈溢出中已经出现了一些类似的问题,但解决方案对我来说并不适用。请您检查一下我的实体,以便找出到底是什么导致了这个问题? 使用者 组 角色 控制器方法 痕迹 /vendor/doctrine/orm/lib/Doctrine/ORM/UnitOfWork.php(2607):教义\ORM\实用程序\标识符Flattener- 解决了的! 该问题是由重新定义的方法引起
我在Spring绘制地图时遇到了麻烦。我有一个Spring web项目,有用户和数据库。我得到了这个网站。xml: 今年Spring: 这是我的控制器: 我想把所有的请求映射到网址“http://localhost:8080/CRUDWebAppMavenized/users”将打开users.jsp.但我总是只看到错误页面。 IDE告诉我: 警告:org.springframework.web.