失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > springmvc 自定义view支持json和jsonp格式数据返回

springmvc 自定义view支持json和jsonp格式数据返回

时间:2020-12-29 16:24:05

相关推荐

springmvc 自定义view支持json和jsonp格式数据返回

1.如果controlloer上用@ResponseBody注解,则用<mvc:message-converter>里面配置的json解析器进行解析

<mvc:annotation-driven><mvc:message-converters register-defaults="true"><bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter"><property name="supportedMediaTypes" value="text/html;charset=UTF-8"/><property name="features"><array><value>WriteMapNullValue</value><value>WriteNullStringAsEmpty</value></array></property></bean></mvc:message-converters></mvc:annotation-driven>

2.如果希望自定义View进行解析,则不能在controller上加 @ResponseBody注解,理由看一.

自定义View进行json和jsonp格式的自动判断并返回相应的json格式

public class JsonView implements View {private static final String CONTENT_TYPE = "application/json";private static final String RESULT = "result";@Overridepublic String getContentType() {return CONTENT_TYPE;}@Overridepublic void render(Map<String, ?> model, HttpServletRequest request, HttpServletResponse response) throws Exception {if(model != null && model.containsKey(RESULT)){Result result = (Result)model.get(RESULT);if(result != null){ResultUtils.render(result, request, response);}}}}

配置ContentNegotiatingViewResolver,进行json解析器选择

<bean id="contentNegotiationManager"class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean"><property name="favorPathExtension" value="true" /><property name="favorParameter" value="true" /><property name="ignoreAcceptHeader" value="true" /><property name="ignoreUnknownPathExtensions" value="false" /><property name="mediaTypes"><map><entry key="json" value="application/json"></entry><entry key="xml" value="application/xml"></entry><entry key="html" value="text/html"></entry></map></property></bean><bean id="contentNegotiatingViewResolver"class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver"><property name="order" value="0" /><property name="contentNegotiationManager" ref="contentNegotiationManager"/><property name="useNotAcceptableStatusCode" value="false"/><!-- 设置默认视图 --><property name="defaultViews"><list><bean class="com.tools.util.JsonView"></bean><bean class="com.tools.util.JsonpView"></bean></list></property><!-- 设置视图解析器 --><property name="viewResolvers"><list><ref bean="viewResolver"/></list></property></bean>

order:如果存在多个viewResolver则order值小的被使用,如果没有合适的viewResolver则会使用另外的;

favorPathExtension:是否支持扩展名,默认为true(支持),扩展名指的xxx.json、xxx.xml等形式

favorParameter:是否启用参数支持,默认为true(支持),即xxx?format=json、xxx?format=xml等形式,这里的参数名默认为format,可以通过配置改变。

ignoreAcceptHeader:是否忽略accept header,默认是false(不忽略),即请求时指定的contentType:application/json等,由于我这里要使用扩展名的形式返回,所以把另外两项都关闭了,可视不同情况,使用不同设置;

mediaTypes:配置扩展名到mimeType的映射,这里配置了json和xml的映射;

defaultViews:配置视图,这里配置了json和xml的视图,json使用的jackson;

这样就可以实现不同的文件扩展名用不同的View解析器进行解析

如果觉得《springmvc 自定义view支持json和jsonp格式数据返回》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。