Spring MVC中 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;
    }

//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直接返回

这个需要的包很重要的,我先放出来。

这个包一定要,很多教程里面没有说到这个包,搞得我一直找不到原因

<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包的查找添加可以到这个网站上去查:点击打开链接,在搜索里面找你要的包名,点开后会列出很多版本,点击你要的新的版本,可以看到这个版本详情里面有添加

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/>  //确保有这一条,就可以了。具体原理我就不多讲,要我讲我也不懂,哈哈,后面会贴大神的解说。

好了,全部工具做完了。

我们再理一下:

首先添加必需的三个JSON包。

再找到上下文件配置文件,打开配置文件,添加
<mvc:annotation-driven/>
完成。

下面是请求的部分了:

@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












评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值