动态jsonView

在从后台数据获取时,发现并没有自己想要的字段,原因是后台使用jsonView并没有包含自己想要的字段.

动态jsonView

一开始想重新写一个方法,使用新定义的jsonView,但是功能都一样,感觉没有必要.因为就是需要使用不同的jsonView,所以考虑能不能根据情况使用不同的jsonView返回数据.

解决

在stackoverflow上找到了解决方法,对此他有一段描述:

You can directly return aorg.springframework.http.converter.json.MappingJacksonValue instance >from your controller that contains both the object that you want to serialise and the view >class.
This will be picked up by the org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter#writeInternal method and the appropriate view will be used.

大意是说可以通过返回MappingJacksonValue这个类的实例来解决这个问题,并且给出了实例代码:

@RequestMapping(value = "/accounts/{id}", method = GET, produces = APPLICATION_JSON_VALUE)
public MappingJacksonValue getAccount(@PathVariable("id") String accountId, @AuthenticationPrincipal User user) {
    final Account account = accountService.get(accountId);
    final MappingJacksonValue result = new MappingJacksonValue(account);
    final Class<? extends View> view = accountPermissionsService.getViewForUser(user);
    result.setSerializationView(view);
    return result;
}

首先就是创建MappingJacksonValue类实例,在构造函数中传入要序列化的对象,之后调用setSerializationView方法传入jsonView的class对象就行了,AbstractJackson2HttpMessageConverter类会处理这个对象并根据传入jsonView来序列化对象.

#最终
最终代码:
@GetMapping
    @ResponseStatus(HttpStatus.OK)
    private MappingJacksonValue getAll(@RequestParam(required = false, value = "isCascade", defaultValue = "false") boolean cascade) {
        List<College> collegeList = collegeService.getAllCollege();
        MappingJacksonValue result = new MappingJacksonValue(collegeList);
        if (cascade) {
            result.setSerializationView(CollegeJsonView.getCascadeMessage.class);
        } else {
            result.setSerializationView(CollegeJsonView.getAll.class);
        }
        return result;
    }

根据isCascade参数来判断是否返回自定义的josnView数据。

原文 

https://segmentfault.com/a/1190000018443459

本站部分文章源于互联网,本着传播知识、有益学习和研究的目的进行的转载,为网友免费提供。如有著作权人或出版方提出异议,本站将立即删除。如果您对文章转载有任何疑问请告之我们,以便我们及时纠正。

PS:推荐一个微信公众号: askHarries 或者qq群:474807195,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

转载请注明原文出处:Harries Blog™ » 动态jsonView

赞 (0)
分享到:更多 ()

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址