如何在春天整合@JsonView和HATEOAS

时间:2016-10-14 16:16:03

标签: spring spring-mvc spring-boot spring-data-jpa

我有一个场景,我需要有JsonViews,可以按如下所示完成:

@JsonView(Institution.InstitutionView.class)
@GetMapping
Page<Institution> getInstitutions( 
   @PageableDefault(sort = "institutionName") Pageable pageable) {
      return institutionService.fetchSortedInstitutions(pageable);
}

但是,当前的实现是使用这样的分页资源:

@GetMapping 
PagedResources<InstitutionResource> getInstitutions(
   @PageableDefault(sort = "institutionName") Pageable pageable,
   PagedResourcesAssembler<Institution> pagedResourcesAssembler){
     return pagedResourcesAssembler.toResource(
        this.institutionService.fetchSortedInstitutions(pageable), 
        new InstitutionResourceAssembler());
}

我怎样才能将这两个实现结合在一起? 基本上如何使用@JsonViews和HATEOAS

1 个答案:

答案 0 :(得分:1)

现在这是不可能的,因为following PR仍然是开放的。 你必须等到它得到解决。

<小时/> 编辑:

你也可以使用Jackson Mixins。这是我用HATEOAS资源类包装一些对象的例子:

public abstract class ResourceMixin {
    @JsonView(CustomView.class)
    public abstract List<Link> getLinks();

    @JsonView(CustomView.class)
    public abstract Link getLink(String rel);

    @JsonView(CustomView.class)
    public abstract Object getContent();
}

你必须在某处注册这样的mixin。我使用了Spring Boot:

@Bean
public Jackson2ObjectMapperBuilder jacksonBuilder(){
    Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder();
    builder.mixIn(Resource.class, ResourceMixin.class);
    return builder;
}