在SpringMVC中使用JsonView或Dozer-Mapper获取Model的一些属性

时间:2016-08-17 11:32:16

标签: spring spring-mvc jackson gson dozer

我有一些层次结构相互依赖的模型,换句话说,User模型具有类型为Personnel模型的属性,Personnel模型具有类型为{的属性{1}}等等。如下所示:

  

用户>人员>组织结构> OrganizationType

安全&性能问题,我想选择一些属性以OrganizationStructure格式返回 Spring MVC REST ;所以我使用json并将此注释放在我想要返回的属性上。

根据this tutorial,我使用此注释,如下所示: JsonView的类:

@JsonView

查看OrganizationStructure的模型:

public class View {
     public interface Summary {}
     public interface SummaryWithRecipients extends Summary {}
}

并查看人员的模型:

public class OrganizationStructureViewModel extends BaseEntityViewModel<Long> {
     @JsonView(View.Summary.class)
     private String                title;
     private String                description;
     @JsonView(View.SummaryWithRecipients.class)
     private Set<UserViewModel>    users;
}

但我不想将 public class PersonnelViewModel extends BaseEntityViewModel<Long> { @JsonView(View.Summary.class) private String username; @JsonView(View.Summary.class) private String firstname; @JsonView(View.Summary.class) private String lastname; private String email; private String password; } 放入内部模型(例如@JsonView&amp; OrganizationStructure模型),因为我无法直接访问这些模型以放置{{1他们的属性。另一方面,这些模型在我的项目中非常有用,对于每个视图我都必须单独放置OrganizationType,并且这些模型的属性上的注释数量太高。

  • 一个解决方案是使用 Dozer-Mapper 并在@JsonView中描述预期属性并使用@JsonView,但xml file的许多属性几乎都是域模型重复。这是我的Dozer-Mapper XML配置: 人员的Dozer-Mapper XML配置:

    ModelView

和OrganizationStructure的Dozer-Mapper XML配置看起来像Personnel。 是否只在一个地方描述预期的财产并使用它?有些东西,比如没有ModelView的Dozer-Mapper,或者可能只有一个主模型的<?xml version="1.0" encoding="UTF-8"?> <mappings xmlns="..."> <mapping> <class-a>org.somepackages.personnel.Personnel</class-a> <class-b>org.somepackages.personnel.PersonnelViewModel</class-b> <!-- Here is some fileds that I want to map from model to view model --> </mapping> </mappings>(在我的情况下是ViewModel模型)?

0 个答案:

没有答案