Spring MVC中 Json序列化对象实例的问题和两个办法
json
适用于现代 C++ 的 JSON。
项目地址:https://gitcode.com/gh_mirrors/js/json
免费下载资源
·
情况是这样的:
HTTP请求中,将一个类的实例直接JSON成文本,返回给客户的端的办法。
系统:ContOS ,IDE:intellij Spring:4.3.6 Json:1.9.13
如果要将一个类的实例直接返回给HTTP请求的客户端,是没办法的。这样做的结果是500错误无法识别的类型。
那么我们一般就是要序列化了。
方法有很多我这里介绍两个我常用的:
一、用JSON工具序列化
二、Spring 通过ResponseBody直接返回(当然要做一点处理)
开始上车吧
类模型是像这样的,我们要把它直接返回给客户端:
public class DMProduct {
private String protID;
private String protName;
public String getProtID(){
return protID;
}
public String getProtName(){
return protName;
}
public void setProtID(String protID){
this.protID=protID;
}
public void setProtName(String protName){
this.protName=protName;
}
}
方法一:用JSON工具序列化:需要包为org.json(后面有加包的代码)
@RequestMapping(value ="/getProduct", method = RequestMethod.GET) //请求方法和请求方式
public @ResponseBody String getProduct() {
DMProduct dmProduct=new DMProduct(); //DMProduct类里面设置ProtID,ProtName等几个字段
dmProduct.setProtID("010001");
dmProduct.setProtName("白萝卜");
String result= JsonHelper.objectToJson(dmProduct).toString(); //将实例JSON 返回给HTTP客户端,方法在下面。注意.toString()
return result;
}
@RequestMapping(value ="/getProduct", method = RequestMethod.GET) //请求方法和请求方式
public @ResponseBody String getProduct() {
DMProduct dmProduct=new DMProduct(); //DMProduct类里面设置ProtID,ProtName等几个字段
dmProduct.setProtID("010001");
dmProduct.setProtName("白萝卜");
String result= JsonHelper.objectToJson(dmProduct).toString(); //将实例JSON 返回给HTTP客户端,方法在下面。注意.toString()
return result;
}
//JSON的方法体
public static<T> JSONObject objectToJson(T obj) {
ObjectMapper mapper = new ObjectMapper();
String jsonStr = "";
try {
jsonStr = mapper.writeValueAsString(obj);
}catch (Exception e){
e.printStackTrace();
}
return new JSONObject(jsonStr);
}
//JSON的方法体
public static<T> JSONObject objectToJson(T obj) {
ObjectMapper mapper = new ObjectMapper();
String jsonStr = "";
try {
jsonStr = mapper.writeValueAsString(obj);
}catch (Exception e){
e.printStackTrace();
}
return new JSONObject(jsonStr);
}
这种办法很简单,JSON的方法可以做在一个工具类里面,调用就可以了。需要一个包:org.json.下面是添加这个包的方法
<!-- https://mvnrepository.com/artifact/org.json/json-->
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20160810</version>
</dependency>
方法二:Spring 通过ResponseBody直接返回
<!-- https://mvnrepository.com/artifact/org.json/json-->
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20160810</version>
</dependency>
这个需要的包很重要的,我先放出来。
这个包一定要,很多教程里面没有说到这个包,搞得我一直找不到原因
<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.8.6</version> </dependency>
下面两个是JSON的包,也是必须的,网上的方法都有提到这两个包
<!-- https://mvnrepository.com/artifact/org.codehaus.jackson/jackson-mapper-asl -->
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.13</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.codehaus.jackson/jackson-core-asl-->
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-core-asl</artifactId>
<version>1.9.13</version>
</dependency>
PS:maven包的查找添加可以到这个网站上去查:点击打开链接,在搜索里面找你要的包名,点开后会列出很多版本,点击你要的新的版本,可以看到这个版本详情里面有添加
<!-- https://mvnrepository.com/artifact/org.codehaus.jackson/jackson-mapper-asl -->
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.13</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.codehaus.jackson/jackson-core-asl-->
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-core-asl</artifactId>
<version>1.9.13</version>
</dependency>
Maven包的方法。
把包添加好之后,在Web.xml里面上下文的配置文件在哪里:如
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/mvc-dispatcher-servlet.xml</param-value>
</context-param>
在WEB-INF下的mvc-dispatcher-servlet.xml文件是上下文的配置文件。打开这个文件
<mvc:annotation-driven/> //确保有这一条,就可以了。具体原理我就不多讲,要我讲我也不懂,哈哈,后面会贴大神的解说。
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/mvc-dispatcher-servlet.xml</param-value>
</context-param>
mvc-dispatcher-servlet.xml文件是上下文的配置文件。打开这个文件
<mvc:annotation-driven/> //确保有这一条,就可以了。具体原理我就不多讲,要我讲我也不懂,哈哈,后面会贴大神的解说。
好了,全部工具做完了。
我们再理一下:
首先添加必需的三个JSON包。
再找到上下文件配置文件,打开配置文件,添加<mvc:annotation-driven/>
完成。
<mvc:annotation-driven/>
下面是请求的部分了:
@RequestMapping(value = "/getProduct2", method = RequestMethod.GET) //一样是客户端的请求方法体和请求方式
public @ResponseBody DMProduct getProduct2() {
DMProduct dmProduct=new DMProduct();
dmProduct.setProtID("010001");
dmProduct.setProtName("白萝卜");
return dmProduct; //直接就可以返回类的实例,系统会自动帮我们序列化给客户端
}
现在就这么几下,不用写代码了,现在程序员越来越简单了,天不早了,希望对你有用。
@RequestMapping(value = "/getProduct2", method = RequestMethod.GET) //一样是客户端的请求方法体和请求方式
public @ResponseBody DMProduct getProduct2() {
DMProduct dmProduct=new DMProduct();
dmProduct.setProtID("010001");
dmProduct.setProtName("白萝卜");
return dmProduct; //直接就可以返回类的实例,系统会自动帮我们序列化给客户端
}
另外加几个大神的文章:
SpringMVC返回json数据的三种方式
spring mvc拦截器和的详解
Spring MVC 中的基于注解的 Controller
GitHub 加速计划 / js / json
41.72 K
6.61 K
下载
适用于现代 C++ 的 JSON。
最近提交(Master分支:1 个月前 )
960b763e
4 个月前
8c391e04
6 个月前
更多推荐
已为社区贡献4条内容
所有评论(0)