mvc设计模式中请求的json解析应该放在controller还是service层?

 我来答
云南新华电脑学校
2018-11-29 · 百度认证:云南新华电脑职业培训学校官方账号
云南新华电脑学校
云南新华电脑学校是经云南省教育厅批准成立的省(部)级重点计算机专业学校,采用三元化管理模式,教学设备先进,师资雄厚学生毕业即就业,学院引进了电商企业入驻,创建心为电商创业园区,实现在校即创业
向TA提问
展开全部

我们项目里分了三层:

  • 表现层:Spring MVC,负责接收Http请求、展现(返回)结果、简单校验

  • App层:提供应用层的功能,比如导入、导出、复杂校验

  • Domain层:处理业务逻辑,比如一些Service

  • 调用顺序是单项的:Controller->App->Domain

    且感知关系为:Controller->App->Domain,即下层不感知上层

    先回答你第一个问题:

    你说的第一个问题我是否可以理解为,Http请求过来的参数不是Object,而是一堆基本类型,但是你的Service接收的参数是Object。正确的做法应该是,在Controller将“生”参数转换成Object对象,然后调用Service。

    为何这样是正确的?因为Service属于Domain层,里面是业务逻辑,其接受的参数应该根据自己的需要而进行设计,不应该考虑Web层过来的参数是什么,这样才可以做到在不同场景下复用。

    举个例子,你的Service应该可以被复用不同表现层环境下:

  • 在一个Web程序中,用户传过来的参数是POST/GET形式给你的

  • 在一个Web service程序中,用户传过来的参数是json或者SOAP

  • 在一个Swing程序中,用户传过来的参数就是字符串

  • 如果你将Service和具体某个表现层环境绑定,那么其方法参数肯定不稳定,结果就导致无法复用。

    同理,Service的返回值也不应该和具体场景绑定。

    在Spring MVC层面,Controller可以很方便的把参数转换成Object,相关文档

    第二个问题:

    这个问题可以分为三个:

    1)简单的校验比如参数长度限制、非空判断等在哪里做?

    简单校验利用Spring MVC的自身提供的机制做,相关文档,相关文档

    2)和Service本身的业务逻辑平行的校验在哪里做,比如用户下单时判断其是否账号被禁用

    我倾向于将这些逻辑校验放在App层做,Controller调用App,App调用两个不同的Service,将业务编织起来

    3)和Service本身有关的业务逻辑校验怎么做

    你举的是登录的例子,用异常告知调用方(Controller)处理结果没有任何问题。你也可以丰富Service的返回值达到这个目的,不过需要注意的是,Service的返回值的设计不能和表现层环境绑定,否则就不能复用了,这也就是为什么 @YaTou[xfslove] 提到了apache-shiro采用的是异常机制处理认证失败,因为只有这样才足够通用。

匿名用户
2018-11-29
展开全部
放在model层
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式