SpringMVC下,如何获取controller的返回值

-TNT- 发布于 2015/08/04 11:29
阅读 8K+
收藏 0

Serverless 架构就不要服务器了?>>>

目前的项目中,前后端通过一个规定的json格式交互数据,类似{"code":0,"data":{}}的形式,所以在controller中,返回的都是同一个类的对象,比如叫Result。

但是这样每一个的controller的带RequestMapping的方法最后都需要调用一个类似 renderResult(data)之类的方法把数据封装成Result对象,看上去很不自然。

所以我想通过一些手段获取controller的返回值,在controller外完成这个封装,这样controller就可以返回一个普通的对象,不需要再调用这个方法,比如这样:

@RequestMapping(...)

@ResponseBody

public Object getX(){

    X x = xService.get();

    retrun renderResult(x); // 现在是这样的

    return x; // 我想要的效果是这样的

}

但是目前发现这个返回值并不好拿,难道真的需要扩展一下springMVC或者用AOP才能达到这种效果么?

加载中
1
景愿
景愿
你可以研究下Spring的HttpMessageConverter, 专门解决你的这个问题
0
P
PennyC
加@ResponseBody,按照方法的返回值返回。
-TNT-
-TNT-
本来就是这样的,现在是想让controller和这种特定的数据格式拆开
0
猫神
猫神
controller方法头上增加@ResponseBody

然后你可以定义一个返回的实体类,定义好属性名,controller就返回那个类对象就OK了

如:

class A{

 int code;

 String msg;

}

controller返回值就是new 一个A



-TNT-
-TNT-
题目没表述好,改了一下,麻烦再看一下^_^
0
魔力猫
魔力猫
我记得从很早开始,Spring本身就支持多种返回格式了。你这里只需要返回对象,后续处理应该是配置文件里面的事情。
0
爱生活_爱JAVA
爱生活_爱JAVA

@ResponseBody Bean

rerutn Bean

其中Bean的定义为

private String a

private String b

页面处理时,可自动处理成为json格式.如下:

["a":"name",

"b":"age"]....

页面解析此josn即可

但只支持基础类型转换.如blob类型需要处理成为String 在做处理

0
maradona
maradona
楼主的想法不错,但假如后端需要给前端的提示语,你又如何封装进去呢?感觉又失去灵活性了
Ambitor
Ambitor
给提示语 此方法返回的就应该是 提示语 啊,然后再由外层去封装一个Result的实体。楼主这个只是为了维护前台与后台的一个json格式约定,可又不想每次去写一次,所以想统一处理罢了,与你说的提示语没关系?我的理解是这样的
-TNT-
-TNT-
其实这个相当于是我们前后端的一种通信协议吧,前端也封了一些函数来处理一些出错之类的逻辑
0
laigous
laigous

你是想将spring mvc返回的对象都解析成json吗?而不需要调用renderjson方法?xml可以配置返回的解析器。凡是返回的@ResponseBody都会被当作json解析

<context:component-scan base-package="com.xx.control" />
<bean class="org.springframework.web.servlet.mvc.annotation.
	DefaultAnnotationHandlerMapping" />
<bean class="org.springframework.web.servlet.mvc.annotation.
	AnnotationMethodHandlerAdapter" >
	<property name="messageConverters">
		<util:list id="beanList">
			<ref bean="mappingJacksonHttpMessageConverter"/>
		</util:list>
	</property>
</bean>
<bean id="mappingJacksonHttpMessageConverter" class="org.springframework.
	http.converter.json.MappingJacksonHttpMessageConverter">
	<property name="supportedMediaTypes">
		<list>
			<value>text/html;charset=UTF-8</value>
		</list>
	</property>
</bean>
<context:annotation-config/>




十月阳光
十月阳光
这位大神给出的就是正解
0
十月阳光
十月阳光

如果你还没有解决问题,参考下我的这两篇博文:

http://my.oschina.net/simpleton/blog/484690

http://my.oschina.net/simpleton/blog/466036

0
高东
高东
我的做法是定义.json的后缀,只要json后缀就使用jackson来解析
0
DRSoul
DRSoul
如果是全部这样的格式,那么实现Spring的messageconver并注册,自己定义msg转换器,按协议字段进行封装转json
返回顶部
顶部