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 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.下面是添加这个包的方法

    
    
      org.json
      json
      20160810
    


方法二:Spring 通过ResponseBody直接返回

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

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

com.fasterxml.jackson.core jackson-databind 2.8.6


下面两个是JSON的包,也是必须的,网上的方法都有提到这两个包


    
      org.codehaus.jackson
      jackson-mapper-asl
      1.9.13
    

    
    
      org.codehaus.jackson
      jackson-core-asl
      1.9.13
    

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

Maven包的方法。

把包添加好之后,在Web.xml里面上下文的配置文件在哪里:如


    contextConfigLocation
    /WEB-INF/mvc-dispatcher-servlet.xml
  

在WEB-INF下的
mvc-dispatcher-servlet.xml文件是上下文的配置文件。打开这个文件

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

好了,全部工具做完了。

我们再理一下:

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

再找到上下文件配置文件,打开配置文件,添加

完成。

下面是请求的部分了:

@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












你可能感兴趣的:(Spring MVC中 Json序列化对象实例的问题和两个办法)