转载http://starscream.iteye.com/blog/1067606
Spring mvc处理json需要使用jackson的类库,因此为支持json格式的输入输出需要先修改pom.xml增加jackson包的引用
Xml代码
<!-- json -->
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-core-lgpl</artifactId>
<version>1.8.1</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-lgpl</artifactId>
<version>1.8.1</version>
</dependency>
先修改之前的helloworld.jsp,增加客户端json格式的数据输入。
Javascript代码
var cfg = {
type: 'POST',
data: JSON.stringify({userName:'winzip',password:'password',mobileNO:'13818881888'}),
dataType: 'json',
contentType:'application/json;charset=UTF-8',
success: function(result) {
alert(result.success);
}
};
function doTestJson(actionName){
cfg.url = actionName;
$.ajax(cfg);
}
根据前面的分析,在spring mvc中解析输入为json格式的数据有两种方式
1:使用@RequestBody来设置输入
Java代码
@RequestMapping("/json1")
@ResponseBody
public JsonResult testJson1(@RequestBody User u){
log.info("get json input from request body annotation");
log.info(u.getUserName());
return new JsonResult(true,"return ok");
}
2:使用HttpEntity来实现输入绑定
Java代码
@RequestMapping("/json2")
public ResponseEntity<JsonResult> testJson2(HttpEntity<User> u){
log.info("get json input from HttpEntity annotation");
log.info(u.getBody().getUserName());
ResponseEntity<JsonResult> responseResult = new ResponseEntity<JsonResult>( new JsonResult(true,"return ok"),HttpStatus.OK);
return responseResult;
}
Json格式的输出也对应有两种方式
1:使用@responseBody来设置输出内容为context body
2:返回值设置为ResponseEntity<?>类型,以返回context body
另外,第三种方式是使用ContentNegotiatingViewResolver来设置输出为json格式,需要修改servlet context配置文件如下
Xml代码
<bean
class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
<property name="order" value="1" />
<property name="mediaTypes">
<map>
<entry key="json" value="application/json" />
</map>
</property>
<property name="defaultViews">
<list>
<bean
class="org.springframework.web.servlet.view.json.MappingJacksonJsonView" />
</list>
</property>
<property name="ignoreAcceptHeader" value="true" />
</bean>
但这种格式的输出会返回{model类名:{内容}} 的json格式,
例如,以下代码
Java代码
@RequestMapping("/json3.json")
public JsonResult testJson3(@RequestBody User u){
log.info("handle json output from ContentNegotiatingViewResolver");
return new JsonResult(true,"return ok");
}
期望的返回是 {success:true,message:”return ok”};
但实际返回的却是 {"jsonResult":{"success":true,"msg":"return ok"}}
原因是MappingJacksonJsonView中对返回值的处理未考虑modelMap中只有一个值的情况,直接是按照mapName:{mapResult}的格式来返回数据的。
修改方法,重载MappingJacksonJsonView类并重写filterModel方法如下
Java代码
protected Object filterModel(Map<String, Object> model) {
Map<?, ?> result = (Map<?, ?>) super.filterModel(model);
if (result.size() == 1) {
return result.values().iterator().next();
} else {
return result;
}
}
对应的ContentNegotiatingViewResolver修改如下
Xml代码
<bean
class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
<property name="order" value="1" />
<property name="mediaTypes">
<map>
<entry key="json" value="application/json" />
</map>
</property>
<property name="defaultViews">
<list>
<bean
class="net.zhepu.json.MappingJacksonJsonView" />
</list>
</property>
<property name="ignoreAcceptHeader" value="true" />
</bean>
分享到:
相关推荐
工程文件 博文链接:https://starscream.iteye.com/blog/1067606
将 JSON 格式化输出为模型的属性 写在之前的注意 JSON中的key对应的value为Null的话会格式化成NSString类型 格式化之前光标放在你需要添加属性的地方 Root...
本篇文章主要介绍了Spring MVC学习笔记之json格式的输入和输出,这里整理了详细的代码,有需要的小伙伴可以参考下。
Jay Pure-Swift JSON解析器和格式化程序。 完全可流式输入和输出。 Linux和OS X就绪。 替换为NSJSONSerialization。 Jay符合以下规范:JSON RFC4627 Open Swift C7 Jay Pure-Swift JSON解析器和格式化程序。 完全可...
以JSON格式输出联系人的相关信息,然后再将其解析为字符串
python基础教程:在python中利⽤dict转json按输⼊顺序输出内容⽅式 今天⼩编就为⼤家分享⼀篇在python中利⽤dict转json按输⼊顺序输出内容⽅式,具有很好的参考价值,希望对⼤家有所帮助。⼀起跟随 ⼩编过来看看吧 ...
那么将格式化后的json 输出到另一个文件*.pretty.json 中。(5 分) test 目录下的e 目录下,有一个乱序的country.json 文件以及一个格式化好、较易阅读 的country.pretty.json 文件。 例如,你的程序名为json,那么...
今天小编就为大家分享一篇在python中利用dict转json按输入顺序输出内容方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧 一般常规的我们保存数据为dict类型时,系统会自动帮我们排序;但有时...
该方法以 XML 字符串数据为输入并将其转换成 JSON 格式的数据输出。这种 PHP 的解决方案有以下几方面的优点: 可以独立模式运行,在命令行下执行。 可以包含到已有服务器端代码工件中。 很容易承载为 Web 上的 ...
将json转换为javebean的工具,封装json...如果应对restful的请求和回应,输入和输出类可以放在同一个包里。否则json文件路径,class名,package名需要一一对应,避免出现同一个包里有相同的类。 具体使用方法参考 ...
Python输入输出-自然语言处理+json格式化 NLP自然语言处理 读取文件 去除所有标点符号和换行符,并把所有大写变成小写; 合并相同的词,统计每个词出现的频率,并按照词频从大到小排序; 将结果按行输出到文件 out....
1.非常简练易懂的JSON格式化小程序 2.实用的IO流管理,读写文件小程序,可改造 3.实际开发中临时写的自己用的,够用,不够完美
源码ESJsonFormat-Xcode,写在之前的注意:Json中的key对应的value为Null的话会格式化成NSString类型 格式化之前光标放在你需要添加属性的地方 RootClass需要自己手动创建,插件只负责RootClass里面的属性生成 生成...
但有时我们想按照输入顺序的key:value保存到dict中,而不想要改变顺序,则我们可以通过使用collecions,进行排序。 collections是一个python的内建模块。 示例如下: # -*- coding:utf-8 -*- #dic = {} dic = dict()...
包里面有测试代码,包含了文件流和标准IO流的输入与输出。 不足: 没有实现‘\uXXXX’的解析与转义 输出是不换行的,如果需要请行写一个格式化输出 效率没有测试过,但我觉得它应该是易用的。
etcd-json-日志 原始 etcd 日志行输入。JSON 日志记录输出。 npm -g install etcd-json-logs cat /var/log/etcd.log | etcd-json-logs 使用记录 JSON 记录。 执照 。
描述一个简单的Java应用程序,它以JSON格式的购物车作为输入,对所含物品加一些税,并以JSON格式产生收据作为输出。输入/输出示例这个简单的程序需要两个参数才能运行: 包含JSON格式的购物车的文件的输入路径; ...
漂亮的package.json prettier-package-json是受prettier启发的JSON格式化程序。 它删除所有原始样式,并确保输出的package.json符合一致的样式。 默认情况下,它使用有效的默认值,但可以根据您的个人需求进行配置。...
格式输入和输出数据。 它将从 STDIN(Java 中的System.in )读取并输出到 STDOUT(Java 中的System.out )。 输入将是一系列 JSON 对象,每个对象包含一个命令(在其自己的行上)。 读入 JSON 对象后,实现将立即...