java后台接口怎么方便返回restful数据
在使用spring mvc的情况下,
你们传给前端(ios/android)的json数据由spring对Bean进行转换的吧?
那个这个Bean,都是定义好的java类?
因为感觉前端需要的json非常灵活,后台如果用几个大而全的bean来封装,前端会得到许多无用的字段。
(虽然可以控制序列化策略,让null值甚至是默认值的字段不出现在json中,但这样一来,字段不全,阅读性差些。)
而如果精细化bean,则需要创建太多的bean。
我们项目中基本采用map来构造需要的数据(主要也是因为用的jdbctemplate,查询出来的数据就是map类型的),不用定义bean类,虽然很灵活,但经常要手写key名,也是麻烦所在。
大家都怎么解决的?请不吝指教,谢谢!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
首先Map的形式是最不推荐的。
前端需要的数据必定是灵活多变的,我们可以创建多个VO,DTO来满足不同的接口调用。
比如用户User中包含密码,而返回前端的数据不能包含密码等敏感字段,我们可以创建UserVO,返回不带密码的数据。你可以通过“领域驱动”进一步了解相关VO,DTO,PO等的区别和使用。
你可能会说,为表现层专门创建VO较为繁琐,bean之间的转换成了问题。
这里推荐使用mapstruct。mapstruct使用注解驱动完成转换代码的生成,你只需要提供Mapper接口即可。
比如User 和 UserVO 的转换:
直接使用Spring WebMVC 的Controller 上面,增加 @ResponseBody 返回POJO
以前也是采用Map的方式进行组合数据,但是手写Key名确实很麻烦,而且很容易出错,这就是所谓的魔术值,应该尽量避免的。后来都改用小而美的bean,每个接口对应一个bean,虽然数量比较多,但是耦合性比建立大而全的bean更松散,修改bean不会影响其他接口,还是可以接受的,不知道有没有其他更优雅的方案。
目前我使用VO和jsonView,VO还是手动转换。。
使用spring在controller层进行控制