`
yiheng
  • 浏览: 156689 次
社区版块
存档分类

SpringMVC 中整合JSON、XML视图一

 
阅读更多

SpringMVC中整合了JSON、XML的视图,可以通过这些视图完成Java对象到XML、JSON的转换。转换XML提供了MarshallingView,开发者只需用注入相应的marshaller、和属性配置,即可自动完成Java的Model对象中的数据到XML的编组。

Email:hoojo_@126.com

Blog:http://blog.csdn.net/IBM_hoojo

http://hoojo.cnblogs.com/

一、 准备工作

1、 本次程序会涉及到Jackson、xStream、Jibx、Jaxb2、castor等技术,如果你对这些技术还不是很了解。建议阅读:http://www.cnblogs.com/hoojo/archive/2011/04/27/2030264.html

这篇文章中涉及到的内容应该对你有不少帮助。

2、 jar包下载

spring各版本jar下载地址:http://ebr.springsource.com/repository/app/library/detail?name=org.springframework.spring

相关的依赖包也可以在这里找到:http://ebr.springsource.com/repository/app/library

3、 至少需要以下jar包

clip_image002

4、 当前工程的web.xml配置

?xml version="1.0" encoding="UTF-8"?>
<!--CRLF-->
web-app version="2.4" 
<!--CRLF-->
    xmlns="http://java.sun.com/xml/ns/j2ee" 
<!--CRLF-->
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
<!--CRLF-->
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
<!--CRLF-->
    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<!--CRLF-->
    
<!--CRLF-->
    -- 配置Spring核心控制器 -->
<!--CRLF-->
    servlet>
<!--CRLF-->
        servlet-name>dispatcher/servlet-name>
<!--CRLF-->
        servlet-class>org.springframework.web.servlet.DispatcherServlet/servlet-class>
<!--CRLF-->
        init-param>
<!--CRLF-->
            param-name>contextConfigLocation/param-name>
<!--CRLF-->
            param-value>/WEB-INF/dispatcher.xml/param-value>
<!--CRLF-->
        /init-param>
<!--CRLF-->
        load-on-startup>1/load-on-startup>
<!--CRLF-->
    /servlet>
<!--CRLF-->
    
<!--CRLF-->
    servlet-mapping>
<!--CRLF-->
        servlet-name>dispatcher/servlet-name>
<!--CRLF-->
        url-pattern>*.do/url-pattern>
<!--CRLF-->
    /servlet-mapping>
<!--CRLF-->
    
<!--CRLF-->
    -- 解决工程编码过滤器 -->
<!--CRLF-->
    filter>
<!--CRLF-->
        filter-name>characterEncodingFilter/filter-name>
<!--CRLF-->
        filter-class>org.springframework.web.filter.CharacterEncodingFilter/filter-class>
<!--CRLF-->
        init-param>
<!--CRLF-->
            param-name>encoding/param-name>
<!--CRLF-->
            param-value>UTF-8/param-value>
<!--CRLF-->
        /init-param>
<!--CRLF-->
    /filter>
<!--CRLF-->
    
<!--CRLF-->
    filter-mapping>
<!--CRLF-->
        filter-name>characterEncodingFilter/filter-name>
<!--CRLF-->
        url-pattern>/*/url-pattern>
<!--CRLF-->
    /filter-mapping>
<!--CRLF-->
    
<!--CRLF-->
    welcome-file-list>
<!--CRLF-->
      welcome-file>index.jsp/welcome-file>
<!--CRLF-->
    /welcome-file-list>
<!--CRLF-->
/web-app>
<!--CRLF-->

5、 WEB-INF中的dispatcher.xml配置

?xml version="1.0" encoding="UTF-8"?>
<!--CRLF-->
beans xmlns="http://www.springframework.org/schema/beans"
<!--CRLF-->
    xmlns:mvc="http://www.springframework.org/schema/mvc"
<!--CRLF-->
    xmlns:context="http://www.springframework.org/schema/context"
<!--CRLF-->
    xmlns:util="http://www.springframework.org/schema/util"
<!--CRLF-->
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
<!--CRLF-->
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
<!--CRLF-->
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
<!--CRLF-->
    http://www.springframework.org/schema/mvc
<!--CRLF-->
    http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
<!--CRLF-->
    http://www.springframework.org/schema/context 
<!--CRLF-->
    http://www.springframework.org/schema/context/spring-context-3.0.xsd
<!--CRLF-->
    http://www.springframework.org/schema/util
<!--CRLF-->
    http://www.springframework.org/schema/util/spring-util-3.0.xsd">
<!--CRLF-->
    
<!--CRLF-->
    -- 注解探测器 -->
<!--CRLF-->
    context:component-scan base-package="com.hoo.controller"/>
<!--CRLF-->
    
<!--CRLF-->
    -- 视图解析器,根据视图的名称new ModelAndView(name),在配置文件查找对应的bean配置 -->
<!--CRLF-->
    bean class="org.springframework.web.servlet.view.BeanNameViewResolver">
<!--CRLF-->
        property name="order" value="1"/>
<!--CRLF-->
    /bean>
<!--CRLF-->
    
<!--CRLF-->
    bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!--CRLF-->
        property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
<!--CRLF-->
    /bean>
<!--CRLF-->
/beans>
<!--CRLF-->

启动后,可以看到index.jsp 没有出现异常或错误。那么当前SpringMVC的配置就成功了。

二、 利用Jaxb2编组XML

1、 Jaxb2可以完成XML和Java的相互转换,在WebService中用得较多。前面也介绍过Jaxb2 的用法。

在线博文:

For cnblogs:http://www.cnblogs.com/hoojo/archive/2011/04/26/2029011.html

For csdn:http://blog.csdn.net/IBM_hoojo/archive/2011/04/26/6363491.aspx

2、 首先在dispatcher.xml中配置Jaxb2的marshaller的视图,配置如下:

-- xml视图,Jaxb2Marshaller,需要配置对象和对象添加Annotation xml注解,不需要添加额外的jar包 -->
<!--CRLF-->
bean name="jaxb2MarshallingView" class="org.springframework.web.servlet.view.xml.MarshallingView">
<!--CRLF-->
    constructor-arg>
<!--CRLF-->
        bean class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
<!--CRLF-->
            property name="classesToBeBound">
<!--CRLF-->
                array>
<!--CRLF-->
                    value>com.hoo.entity.User/value>
<!--CRLF-->
                    value>com.hoo.entity.AccountBean/value>
<!--CRLF-->
                    value>com.hoo.entity.MapBean/value>
<!--CRLF-->
                    value>com.hoo.entity.ListBean/value>
<!--CRLF-->
                /array>
<!--CRLF-->
            /property>
<!--CRLF-->
        /bean>
<!--CRLF-->
    /constructor-arg>
<!--CRLF-->
/bean>
<!--CRLF-->

Jaxb2的jar在jdk中已经包含,所以不需要添加额外的jar包。详细信息你可以参考1中的博文。上面的jaxb2MarshallingView视图的class是MarshallingView,它有一个构造器需要传递一个Marshaller。Marshaller主要完成编组,即将Java对象转换成XML的这么一个东东。我们在这个构造器中注入了Jaxb2Marshaller这个类,这个bean有一个classesToBeBound属性,这个属性是一个数组。需要将即将转换成XML的Java对象配置在这里。而且这些对象需要进行Annotation注解。

3、 创建Jaxb2MarshallingViewController,完成Java对象到XML的转换

单个JavaBean的转换,代码如下:

package com.hoo.controller;
<!--CRLF-->

<!--CRLF-->

    
import java.util.ArrayList;
<!--CRLF-->
import java.util.Date;
<!--CRLF-->
import java.util.List;
<!--CRLF-->
import org.springframework.stereotype.Controller;
<!--CRLF-->
import org.springframework.web.bind.annotation.RequestMapping;
<!--CRLF-->
import org.springframework.web.servlet.ModelAndView;
<!--CRLF-->
import com.hoo.entity.AccountBean;
<!--CRLF-->
import com.hoo.entity.Brithday;
<!--CRLF-->
import com.hoo.entity.DifferBean;
<!--CRLF-->
import com.hoo.entity.ListBean;
<!--CRLF-->
import com.hoo.entity.MoreBean;
<!--CRLF-->
import com.hoo.entity.User;
<!--CRLF-->

<!--CRLF-->

    
/**
<!--CRLF-->
 * function:Jaxb2MarshallingView 视图,利用Jaxb2进行Java对象到XML的转换技术
<!--CRLF-->
 * @author hoojo
<!--CRLF-->
 * @createDate 2011-4-27 下午03:20:23
<!--CRLF-->
 * @file Jaxb2MarshallingViewController.java
<!--CRLF-->
 * @package com.hoo.controller
<!--CRLF-->
 * @project SpringMVC4View
<!--CRLF-->
 * @blog http://blog.csdn.net/IBM_hoojo
<!--CRLF-->
 * @email hoojo_@126.com
<!--CRLF-->
 * @version 1.0
<!--CRLF-->
 */
<!--CRLF-->
@Controller
<!--CRLF-->
@RequestMapping("/jaxb2/view")
<!--CRLF-->
public class Jaxb2MarshallingViewController {
<!--CRLF-->
    
<!--CRLF-->
    /*
<!--CRLF-->
     * MarshallingView Jaxb2Marshaller 需要配置转换成xml的java对象的Annotation
<!--CRLF-->
     */
<!--CRLF-->
    @RequestMapping("/doXMLJaxb2")
<!--CRLF-->
    public ModelAndView doXMLJaxb2View() {
<!--CRLF-->
        System.out.println("#################ViewController doXMLJaxb2View##################");
<!--CRLF-->
        ModelAndView mav = new ModelAndView("jaxb2MarshallingView");
<!--CRLF-->
        
<!--CRLF-->
        AccountBean bean = new AccountBean();
<!--CRLF-->
        bean.setAddress("address");
<!--CRLF-->
        bean.setEmail("email");
<!--CRLF-->
        bean.setId(1);
<!--CRLF-->
        bean.setName("haha");
<!--CRLF-->
        Brithday day = new Brithday();
<!--CRLF-->
        day.setBrithday("2010-11-22");
<!--CRLF-->
        bean.setBrithday(day);
<!--CRLF-->
        
<!--CRLF-->
        mav.addObject(bean);
<!--CRLF-->
        
<!--CRLF-->
        return mav;
<!--CRLF-->
    }
<!--CRLF-->
}
<!--CRLF-->

上面的代码的ModelAndView配置了jaxb2MarshallingView这个视图,就表示结果集会通过这个视图进行编组后显示。上面需要转换的AccountBean和Birthday对象,这些对象需要配置annotation,前面已经讲到annotation对JavaBean转换XML的作用。我们来看看AccountBean对象代码:

package com.hoo.entity;
<!--CRLF-->

<!--CRLF-->

    
import javax.xml.bind.annotation.XmlElement;
<!--CRLF-->
import javax.xml.bind.annotation.XmlRootElement;
<!--CRLF-->

<!--CRLF-->

    
@XmlRootElement(name = "account")
<!--CRLF-->
public class AccountBean {
<!--CRLF-->
    private int id;
<!--CRLF-->
    private String name;
<!--CRLF-->
    private String email;
<!--CRLF-->
    private String address;
<!--CRLF-->
    private Brithday brithday;
<!--CRLF-->
    
<!--CRLF-->
    @XmlElement
<!--CRLF-->
    public Brithday getBrithday() {
<!--CRLF-->
        return brithday;
<!--CRLF-->
    }
<!--CRLF-->
    public void setBrithday(Brithday brithday) {
<!--CRLF-->
        this.brithday = brithday;
<!--CRLF-->
    }
<!--CRLF-->
    
<!--CRLF-->
    @XmlElement
<!--CRLF-->
    public int getId() {
<!--CRLF-->
        return id;
<!--CRLF-->
    }
<!--CRLF-->
    public void setId(int id) {
<!--CRLF-->
        this.id = id;
<!--CRLF-->
    }
<!--CRLF-->
    
<!--CRLF-->
    @XmlElement
<!--CRLF-->
    public String getName() {
<!--CRLF-->
        return name;
<!--CRLF-->
    }
<!--CRLF-->
    public void setName(String name) {
<!--CRLF-->
        this.name = name;
<!--CRLF-->
    }
<!--CRLF-->
    
<!--CRLF-->
    @XmlElement
<!--CRLF-->
    public String getEmail() {
<!--CRLF-->
        return email;
<!--CRLF-->
    }
<!--CRLF-->
    public void setEmail(String email) {
<!--CRLF-->
        this.email = email;
<!--CRLF-->
    }
<!--CRLF-->
    
<!--CRLF-->
    @XmlElement
<!--CRLF-->
    public String getAddress() {
<!--CRLF-->
        return address;
<!--CRLF-->
    }
<!--CRLF-->
    public void setAddress(String address) {
<!--CRLF-->
        this.address = address;
<!--CRLF-->
    }
<!--CRLF-->
    
<!--CRLF-->
    @Override
<!--CRLF-->
    public String toString() {
<!--CRLF-->
        return this.name + "#" + this.id + "#" + this.address + "#" + this.brithday + "#" + this.email;
<!--CRLF-->
    }
<!--CRLF-->
}
<!--CRLF-->

在getter方法都有部分注解,如果你想了解更多的jaxb2的相关技术,参考:http://www.cnblogs.com/hoojo/archive/2011/04/26/2029011.html

Brithday

package com.hoo.entity;
<!--CRLF-->

<!--CRLF-->

    
public class Brithday {
<!--CRLF-->
    private String brithday;
<!--CRLF-->
    
<!--CRLF-->
    public Brithday() {}
<!--CRLF-->
    
<!--CRLF-->
    public Brithday(String brithday) {
<!--CRLF-->
        this.brithday = brithday;
<!--CRLF-->
    }
<!--CRLF-->
    
<!--CRLF-->
    public String getBrithday() {
<!--CRLF-->
        return brithday;
<!--CRLF-->
    }
<!--CRLF-->

<!--CRLF-->

    
    public void setBrithday(String brithday) {
<!--CRLF-->
        this.brithday = brithday;
<!--CRLF-->
    }
<!--CRLF-->
}
<!--CRLF-->

Brithday是AccountBean中的一个属性,在AccountBean中已经注解过。这里就不需要进行注解配置。

通过浏览器请求:http://localhost:8080/SpringMVC4View/jaxb2/view/doXMLJaxb2.do

结果如下:

?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!--CRLF-->
account>address>address/address>brithday>brithday>2010-11-22/brithday>/brithday>
<!--CRLF-->
email>email/email>id>1/id>name>haha/name>/account>
<!--CRLF-->

4、 转换带List属性的JavaEntity

/**
<!--CRLF-->
 * function:转换带有List属性的JavaBean
<!--CRLF-->
 * @author hoojo
<!--CRLF-->
 * @createDate 2011-4-27 下午05:32:22
<!--CRLF-->
 * @return
<!--CRLF-->
 */
<!--CRLF-->
@RequestMapping("/doListXMLJaxb2")
<!--CRLF-->
public ModelAndView doListXMLJaxb2View() {
<!--CRLF-->
    System.out.println("#################ViewController doListXMLJaxb2View##################");
<!--CRLF-->
    ModelAndView mav = new ModelAndView("jaxb2MarshallingView");
<!--CRLF-->
    ListObject> beans = new ArrayListObject>(); 
<!--CRLF-->
    for (int i = 0; i  3; i++) {
<!--CRLF-->
        AccountBean bean = new AccountBean();
<!--CRLF-->
        bean.setAddress("address#" + i);
<!--CRLF-->
        bean.setEmail("email" + i + "@12" + i + ".com");
<!--CRLF-->
        bean.setId(1 + i);
<!--CRLF-->
        bean.setName("haha#" + i);
<!--CRLF-->
        Brithday day = new Brithday();
<!--CRLF-->
        day.setBrithday("2010-11-2" + i);
<!--CRLF-->
        bean.setBrithday(day);
<!--CRLF-->
        beans.add(bean);
<!--CRLF-->
        
<!--CRLF-->
        User user = new User();
<!--CRLF-->
        user.setAddress("china GuangZhou# " + i);
<!--CRLF-->
        user.setAge(23 + i);
<!--CRLF-->
        user.setBrithday(new Date());
<!--CRLF-->
        user.setName("jack#" + i);
<!--CRLF-->
        user.setSex(Boolean.parseBoolean(i + ""));
<!--CRLF-->
        beans.add(user);
<!--CRLF-->
    }
<!--CRLF-->
    
<!--CRLF-->
    ListBean list = new ListBean();
<!--CRLF-->
    list.setList(beans);
<!--CRLF-->
    mav.addObject(list);
<!--CRLF-->
    
<!--CRLF-->
    return mav;
<!--CRLF-->
}
<!--CRLF-->
ListBean注解过的代码
package com.hoo.entity;
<!--CRLF-->

<!--CRLF-->

    
import java.util.List;
<!--CRLF-->
import javax.xml.bind.annotation.XmlElement;
<!--CRLF-->
import javax.xml.bind.annotation.XmlElements;
<!--CRLF-->
import javax.xml.bind.annotation.XmlRootElement;
<!--CRLF-->

<!--CRLF-->

    
@SuppressWarnings("unchecked")
<!--CRLF-->
@XmlRootElement
<!--CRLF-->
public class ListBean {
<!--CRLF-->
    private String name;
<!--CRLF-->
    private List list;
<!--CRLF-->
    
<!--CRLF-->
    @XmlElements({
<!--CRLF-->
        @XmlElement(name = "user", type = User.class),
<!--CRLF-->
        @XmlElement(name = "account", type = AccountBean.class),
<!--CRLF-->
    })
<!--CRLF-->
    public List getList() {
<!--CRLF-->
        return list;
<!--CRLF-->
    }
<!--CRLF-->

<!--CRLF-->

    
    public void setList(List list) {
<!--CRLF-->
        this.list = list;
<!--CRLF-->
    }
<!--CRLF-->

<!--CRLF-->

    
    public String getName() {
<!--CRLF-->
        return name;
<!--CRLF-->
    }
<!--CRLF-->

<!--CRLF-->

    
    public void setName(String name) {
<!--CRLF-->
        this.name = name;
<!--CRLF-->
    }
<!--CRLF-->
}
<!--CRLF-->

通过上面的注解可以看出List中只能存储User、AccountBean对象,关于User对象的代码和AccountBean对象的是一样的,只是类名不同而已。读者可以自己添加。在WebBrowser中请求:http://localhost:8080/SpringMVC4View/jaxb2/view/doListXMLJaxb2.do

结果如下:

?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!--CRLF-->
listBean>
<!--CRLF-->
account>address>address#0/address>brithday>brithday>2010-11-20/brithday>/brithday>
<!--CRLF-->
email>email0@120.com/email>id>1/id>name>haha#0/name>/account>
<!--CRLF-->
user>address>china GuangZhou# 0/address>age>23/age>
<!--CRLF-->
brithday>2011-04-27T17:02:38.028+08:00/brithday>name>jack#0/name>sex>false/sex>/user>
<!--CRLF-->
account>address>address#1/address>brithday>brithday>2010-11-21/brithday>/brithday>
<!--CRLF-->
email>email1@121.com/email>id>2/id>name>haha#1/name>/account>
<!--CRLF-->
user>address>china GuangZhou# 1/address>age>24/age>
<!--CRLF-->
brithday>2011-04-27T17:02:38.028+08:00/brithday>name>jack#1/name>sex>false/sex>/user>
<!--CRLF-->
account>address>address#2/address>brithday>brithday>2010-11-22/brithday>/brithday>
<!--CRLF-->
email>email2@122.com/email>id>3/id>name>haha#2/name>/account>
<!--CRLF-->
user>address>china GuangZhou# 2/address>age>25/age>
<!--CRLF-->
brithday>2011-04-27T17:02:38.028+08:00/brithday>name>jack#2/name>sex>false/sex>/user>
<!--CRLF-->
/listBean>
<!--CRLF-->

5、 转换带有Map属性的JavaBean,Jaxb2转换Map有点复杂,先看看代码:

/**
<!--CRLF-->
 * function:转换带有Map属性的JavaBean
<!--CRLF-->
 * @author hoojo
<!--CRLF-->
 * @createDate 2011-4-27 下午05:32:42
<!--CRLF-->
 * @return
<!--CRLF-->
 */
<!--CRLF-->
@RequestMapping("/doMapXMLJaxb2")
<!--CRLF-->
public ModelAndView doMapXMLJaxb2View() {
<!--CRLF-->
    System.out.println("#################ViewController doMapXMLJaxb2View##################");
<!--CRLF-->
    ModelAndView mav = new ModelAndView("jaxb2MarshallingView");
<!--CRLF-->
    
<!--CRLF-->
    MapBean mapBean = new MapBean();
<!--CRLF-->
    
<!--CRLF-->
    HashMap<string accountbean> map = <span style="color: #0000ff">new</span> HashMap<string accountbean>();</string></string>
<!--CRLF-->
    AccountBean bean = new AccountBean();
<!--CRLF-->
    bean.setAddress("北京");
<!--CRLF-->
    bean.setEmail("email");
<!--CRLF-->
    bean.setId(1);
<!--CRLF-->
    bean.setName("jack");
<!--CRLF-->
    Brithday day = new Brithday();
<!--CRLF-->
    day.setBrithday("2010-11-22");
<!--CRLF-->
    bean.setBrithday(day);
<!--CRLF-->
    map.put("NO1", bean);
<!--CRLF-->
    
<!--CRLF-->
    bean = new AccountBean();
<!--CRLF-->
    bean.setAddress("china");
<!--CRLF-->
    bean.setEmail("tom@125.com");
<!--CRLF-->
    bean.setId(2);
<!--CRLF-->
    bean.setName("tom");
<!--CRLF-->
    day = new Brithday("2011-11-22");
<!--CRLF-->
    bean.setBrithday(day);
<!--CRLF-->
    map.put("NO2", bean);
<!--CRLF-->
    
<!--CRLF-->
    mapBean.setMap(map);
<!--CRLF-->
    
<!--CRLF-->
    mav.addObject(mapBean);
<!--CRLF-->
    
<!--CRLF-->
    return mav;
<!--CRLF-->
}
<!--CRLF-->

首先看看MapBean的代码,代码很简单就一个Map的属性。

package com.hoo.entity;
<!--CRLF-->

<!--CRLF-->

    
import java.util.HashMap;
<!--CRLF-->
import javax.xml.bind.annotation.XmlRootElement;
<!--CRLF-->
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
<!--CRLF-->
import com.hoo.util.MapAdapter;
<!--CRLF-->

<!--CRLF-->

    
@XmlRootElement
<!--CRLF-->
public class MapBean {
<!--CRLF-->
    private HashMap<string accountbean> map;</string>
<!--CRLF-->
    
<!--CRLF-->
    @XmlJavaTypeAdapter(MapAdapter.class)
<!--CRLF-->
    public HashMap<string accountbean> getMap() {</string>
<!--CRLF-->
        return map;
<!--CRLF-->
    }
<!--CRLF-->
    public void setMap(HashMap<string accountbean> map) {</string>
<!--CRLF-->
        this.map = map;
<!--CRLF-->
    }
<!--CRLF-->
}
<!--CRLF-->

上面的代码的getMap方法设置了XmlJavaTypeAdapter这个注解,注解里面的MapAdapter是我们自己实现的,而且还要构建一个MapElements数组元素。主要是继承XmlAdapter重写里面的几个方法完成的。

MapAdapter代码

package com.hoo.util;
<!--CRLF-->

<!--CRLF-->

    
import java.util.HashMap;
<!--CRLF-->
import java.util.Map;
<!--CRLF-->
import javax.xml.bind.annotation.adapters.XmlAdapter;
<!--CRLF-->
import com.hoo.entity.AccountBean;
<!--CRLF-->

<!--CRLF-->

    
/**
<!--CRLF-->
 * function:AccountBean 编组、解组的XmlAdapter
<!--CRLF-->
 * @author hoojo
<!--CRLF-->
 * @createDate 2011-4-25 下午05:03:18
<!--CRLF-->
 * @file MyAdetper.java
<!--CRLF-->
 * @package com.hoo.util
<!--CRLF-->
 * @project WebHttpUtils
<!--CRLF-->
 * @blog http://blog.csdn.net/IBM_hoojo
<!--CRLF-->
 * @email hoojo_@126.com
<!--CRLF-->
 * @version 1.0
<!--CRLF-->
 */
<!--CRLF-->
public class MapAdapter extends XmlAdapter<mapelements map accountbean>&gt; {</mapelements>
<!--CRLF-->
    public MapElements[] marshal(Map<string accountbean> arg0) <span style="color: #0000ff">throws</span> Exception {</string>
<!--CRLF-->
        MapElements[] mapElements = new MapElements[arg0.size()];
<!--CRLF-->

<!--CRLF-->

    
        int i = 0;
<!--CRLF-->
        for (Map.Entry<string accountbean> entry : arg0.entrySet())</string>
<!--CRLF-->
            mapElements[i++] = new MapElements(entry.getKey(), entry.getValue());
<!--CRLF-->

<!--CRLF-->

    
        return mapElements;
<!--CRLF-->
    }
<!--CRLF-->

<!--CRLF-->

    
    public Map<string accountbean> unmarshal(MapElements[] arg0) <span style="color: #0000ff">throws</span> Exception {</string>
<!--CRLF-->
        Map<string accountbean> r = <span style="color: #0000ff">new</span> HashMap<string accountbean>();</string></string>
<!--CRLF-->
        for (MapElements mapelement : arg0)
<!--CRLF-->
            r.put(mapelement.key, mapelement.value);
<!--CRLF-->
        return r;
<!--CRLF-->
    }
<!--CRLF-->
}
<!--CRLF-->

MapElements代码

package com.hoo.util;
<!--CRLF-->

<!--CRLF-->

    
import javax.xml.bind.annotation.XmlElement;
<!--CRLF-->
import com.hoo.entity.AccountBean;
<!--CRLF-->

<!--CRLF-->

    
/**
<!--CRLF-->
 * function: MapElements
<!--CRLF-->
 * @author hoojo
<!--CRLF-->
 * @createDate 2011-4-25 下午05:04:04
<!--CRLF-->
 * @file MyElements.java
<!--CRLF-->
 * @package com.hoo.util
<!--CRLF-->
 * @project WebHttpUtils
<!--CRLF-->
 * @blog http://blog.csdn.net/IBM_hoojo
<!--CRLF-->
 * @email hoojo_@126.com
<!--CRLF-->
 * @version 1.0
<!--CRLF-->
 */
<!--CRLF-->
public class MapElements {
<!--CRLF-->
    @XmlElement
<!--CRLF-->
    public String key;
<!--CRLF-->
    
<!--CRLF-->
    @XmlElement
<!--CRLF-->
    public AccountBean value;
<!--CRLF-->

<!--CRLF-->

    
    @SuppressWarnings("unused")
<!--CRLF-->
    private MapElements() {
<!--CRLF-->
    } // Required by JAXB
<!--CRLF-->

<!--CRLF-->

    
    public MapElements(String key, AccountBean value) {
<!--CRLF-->
        this.key = key;
<!--CRLF-->
        this.value = value;
<!--CRLF-->
    }
<!--CRLF-->
}
<!--CRLF-->

在浏览器中请求:http://localhost:8080/SpringMVC4View/jaxb2/view/doMapXMLJaxb2.do

结果如下:

?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!--CRLF-->
mapBean>map>item>key>NO2/key>value>address>china/address>
<!--CRLF-->
brithday>brithday>2011-11-22/brithday>/brithday>
<!--CRLF-->
email>tom@125.com/email>id>2/id>name>tom/name>/value>/item>
<!--CRLF-->
item>key>NO1/key>value>address>北京/address>brithday>brithday>2010-11-22/brithday>/brithday>
<!--CRLF-->
email>email/email>id>1/id>name>jack/name>/value>/item>/map>
<!--CRLF-->
/mapBean>
<!--CRLF-->

总结,如果你想将一些Java的基本类型转换成XML。那么你得创建一个带getter、setter方法的JavaBean。然后在Bean的getter方法进行相应的Annotation注解即可完成转换。

三、 利用xStream转换XML

1、 xStream可以轻易的将Java对象转换成XML、JSON,Spring整合利用xStream转换xml。需要添加xStream相关的xstream-1.3.1.jar包。 如果你对xStream不上很了解,你可以先阅读这篇文章:

For csblogs:http://www.cnblogs.com/hoojo/archive/2011/04/22/2025197.html

For csdn:http://blog.csdn.net/IBM_hoojo/archive/2011/04/22/6342386.aspx

2、 然后在dispatcher.xml中添加如下配置

-- xml视图,XStreamMarshaller,可以转换任何形式的java对象,需要添加xStream jar包 -->
<!--CRLF-->
bean name="xStreamMarshallingView" class="org.springframework.web.servlet.view.xml.MarshallingView">
<!--CRLF-->
    property name="marshaller">
<!--CRLF-->
        bean class="org.springframework.oxm.xstream.XStreamMarshaller">  
<!--CRLF-->
               --  启用annotation -->
<!--CRLF-->
               property name="autodetectAnnotations" value="true"/>  
<!--CRLF-->
               -- 类名别名 -->
<!--CRLF-->
            property name="aliases">
<!--CRLF-->
                map>
<!--CRLF-->
                    -- Account这个类的别名就变成了myBeans,那么转换后的xml中就是myBeans -->
<!--CRLF-->
                    entry key="myBeans" value="com.hoo.entity.Account"/>
<!--CRLF-->
                /map>
<!--CRLF-->
            /property>
<!--CRLF-->
            -- 基本属性别名 -->
<!--CRLF-->
            property name="fieldAliases">
<!--CRLF-->
                map>
<!--CRLF-->
                    -- Account中的brithday这个属性 -->
<!--CRLF-->
                    entry key="com.hoo.entity.Account.brithday" value="生日"/>
<!--CRLF-->
                /map>
<!--CRLF-->
            /property>
<!--CRLF-->
           /bean>  
<!--CRLF-->
    /property>
<!--CRLF-->
/bean>
<!--CRLF-->

上次配置的参数有注释描述,还要没有配置的参数。如:annotatedClass、annotatedClasses是当没有配置启用annotation的时候,可以用这2个属性进行配置你指定的class启用annotation注解。streamDriver是配置驱动用的,默认可以不要驱动,你可以配置DomDriver、JSON相关的驱动。encoding是设置编码,关于XStreamMarshaller还要更多的参数配置和上面xStream 的博文中讲解的一样使用,只是通过配置,而博文中是直接在代码中写的。当然也可以通过annotation进行注解哦;如果你想了解更多xStream的用法,请你仔细阅读:http://www.cnblogs.com/hoojo/archive/2011/04/22/2025197.html

3、 普通JavaBean转换XML

package com.hoo.controller;
<!--CRLF-->

<!--CRLF-->

    
import java.util.ArrayList;
<!--CRLF-->
import java.util.Date;
<!--CRLF-->
import java.util.HashMap;
<!--CRLF-->
import java.util.List;
<!--CRLF-->
import java.util.Map;
<!--CRLF-->
import org.springframework.stereotype.Controller;
<!--CRLF-->
import org.springframework.web.bind.annotation.RequestMapping;
<!--CRLF-->
import org.springframework.web.servlet.ModelAndView;
<!--CRLF-->
import com.hoo.entity.Account;
<!--CRLF-->
import com.hoo.entity.AccountArray;
<!--CRLF-->
import com.hoo.entity.AccountBean;
<!--CRLF-->
import com.hoo.entity.Brithday;
<!--CRLF-->
import com.hoo.entity.DifferBean;
<!--CRLF-->
import com.hoo.entity.ListBean;
<!--CRLF-->
import com.hoo.entity.MapBean;
<!--CRLF-->
import com.hoo.entity.MoreBean;
<!--CRLF-->
import com.hoo.entity.User;
<!--CRLF-->

<!--CRLF-->

    
/**
<!--CRLF-->
 * function:Jaxb2MarshallingView 视图,利用Jaxb2进行Java对象到XML的转换技术
<!--CRLF-->
 * @author hoojo
<!--CRLF-->
 * @createDate 2011-4-27 下午03:20:23
<!--CRLF-->
 * @file Jaxb2MarshallingViewController.java
<!--CRLF-->
 * @package com.hoo.controller
<!--CRLF-->
 * @project SpringMVC4View
<!--CRLF-->
 * @blog http://blog.csdn.net/IBM_hoojo
<!--CRLF-->
 * @email hoojo_@126.com
<!--CRLF-->
 * @version 1.0
<!--CRLF-->
 */
<!--CRLF-->
@Controller
<!--CRLF-->
@RequestMapping("/jaxb2/view")
<!--CRLF-->
public class Jaxb2MarshallingViewController {
<!--CRLF-->
    
<!--CRLF-->
    /*
<!--CRLF-->
     * MarshallingView Jaxb2Marshaller 需要配置转换成xml的java对象的Annotation
<!--CRLF-->
     */
<!--CRLF-->
    @RequestMapping("/doXMLJaxb2")
<!--CRLF-->
    public ModelAndView doXMLJaxb2View() {
<!--CRLF-->
        System.out.println("#################ViewController doXMLJaxb2View##################");
<!--CRLF-->
        ModelAndView mav = new ModelAndView("jaxb2MarshallingView");
<!--CRLF-->
        
<!--CRLF-->
        AccountBean bean = new AccountBean();
<!--CRLF-->
        bean.setAddress("address");
<!--CRLF-->
        bean.setEmail("email");
<!--CRLF-->
        bean.setId(1);
<!--CRLF-->
        bean.setName("haha");
<!--CRLF-->
        Brithday day = new Brithday();
<!--CRLF-->
        day.setBrithday("2010-11-22");
<!--CRLF-->
        bean.setBrithday(day);
<!--CRLF-->
        
<!--CRLF-->
        mav.addObject(bean);
<!--CRLF-->
        
<!--CRLF-->
        return mav;
<!--CRLF-->
    }
<!--CRLF-->
}
<!--CRLF-->

AccountBean上面的代码已经给出,这里就不重复了。值得说明的是xStream在ModelAndView中,直接用addObject方法添加时,有时候出现一些不是我们转换的对象的信息,一般是BindingResult的xml信息。解决办法就是设置addObject的key。Key设置为BindingResult.MODEL_KEY_PREFIX这样就可以了,代码上面已经给出。

在浏览器中请求:http://localhost:8080/SpringMVC4View/xStream/view/doXMLXStream.do

结果如下:

com.hoo.entity.AccountBean>id>1/id>name>haha/name>email>email/email>address>北京/address>
<!--CRLF-->
brithday>brithday>2010-11-22/brithday>/brithday>/com.hoo.entity.AccountBean>
<!--CRLF-->

4、 转换对象数组

代码如下:

/**
<!--CRLF-->
 * function:转换对象数组
<!--CRLF-->
 * @author hoojo
<!--CRLF-->
 * @createDate 2011-4-27 下午06:19:40
<!--CRLF-->
 * @return
<!--CRLF-->
 */
<!--CRLF-->
@RequestMapping("/doMoreXMLXStream")
<!--CRLF-->
public ModelAndView doMoreXMLXStreamView() {
<!--CRLF-->
    System.out.println("#################ViewController doMoreXMLXStreamView##################");
<!--CRLF-->
    ModelAndView mav = new ModelAndView("xStreamMarshallingView");    
<!--CRLF-->
    Account[] accs = new Account[2];
<!--CRLF-->
    Account bean = new Account();
<!--CRLF-->
    bean.setAddress("北京");
<!--CRLF-->
    bean.setEmail("email");
<!--CRLF-->
    bean.setId(1);
<!--CRLF-->
    bean.setName("haha");
<!--CRLF-->
    Brithday day = new Brithday();
<!--CRLF-->
    day.setBrithday("2010-11-22");
<!--CRLF-->
    bean.setBrithday(day);
<!--CRLF-->
    accs[0] = bean;
<!--CRLF-->
    
<!--CRLF-->
    bean = new Account();
<!--CRLF-->
    bean.setAddress("上海");
<!--CRLF-->
    bean.setEmail("email");
<!--CRLF-->
    bean.setId(1);
<!--CRLF-->
    bean.setName("haha");
<!--CRLF-->
    day = new Brithday();
<!--CRLF-->
    day.setBrithday("2010-11-22");
<!--CRLF-->
    bean.setBrithday(day);
<!--CRLF-->
    accs[1] = bean;
<!--CRLF-->
    mav.addObject(accs);
<!--CRLF-->
    return mav;
<!--CRLF-->
}
<!--CRLF-->

在WebBrowser中请求http://localhost:8080/SpringMVC4View/xStream/view/doMoreXMLXStream.do

结果如下:

myBeans-array>myBeans>id>1/id>name>haha/name>email>email/email>
<!--CRLF-->
address>北京/address>生日>brithday>2010-11-22/brithday>/生日>/myBeans>
<!--CRLF-->
myBeans>id>1/id>name>haha/name>email>email/email>address>上海/address>
<!--CRLF-->
生日>brithday>2010-11-22/brithday>/生日>/myBeans>/myBeans-array>
<!--CRLF-->

结果中的myBeans、生日就是在dispatcher配置文件中重命名的对象属性名称。

5、 转换Map集合

/**
<!--CRLF-->
 * function:转换Map对象
<!--CRLF-->
 * @author hoojo
<!--CRLF-->
 * @createDate 2011-4-27 下午06:19:48
<!--CRLF-->
 * @return
<!--CRLF-->
 */
<!--CRLF-->
@RequestMapping("/doDifferXMLXStream")
<!--CRLF-->
public ModelAndView doDifferXMLXStreamView() {
<!--CRLF-->
    System.out.println("#################ViewController doDifferXMLXStreamView##################");
<!--CRLF-->
    ModelAndView mav = new ModelAndView("xStreamMarshallingView");
<!--CRLF-->
    
<!--CRLF-->
    Account bean = new Account();
<!--CRLF-->
    bean.setAddress("广东");
<!--CRLF-->
    bean.setEmail("email");
<!--CRLF-->
    bean.setId(1);
<!--CRLF-->
    bean.setName("haha");
<!--CRLF-->
    Brithday day = new Brithday();
<!--CRLF-->
    day.setBrithday("2010-11-22");
<!--CRLF-->
    bean.setBrithday(day);
<!--CRLF-->
    
<!--CRLF-->
    User user = new User();
<!--CRLF-->
    user.setAddress("china GuangZhou");
<!--CRLF-->
    user.setAge(23);
<!--CRLF-->
    user.setBrithday(new Date());
<!--CRLF-->
    user.setName("jack");
<!--CRLF-->
    user.setSex(true);
<!--CRLF-->
    
<!--CRLF-->
    Map<string object> map = <span style="color: #0000ff">new</span> HashMap<string object>();</string></string>
<!--CRLF-->
    map.put("bean", bean);
<!--CRLF-->
    map.put("user", user);
<!--CRLF-->
    mav.addObject(map);
<!--CRLF-->
    return mav;
<!--CRLF-->
}
<!--CRLF-->

在WebBrowser中请求http://localhost:8080/SpringMVC4View/xStream/view/doDifferXMLXStream.do

结果如下:

map>entry>
<!--CRLF-->
string>bean/string>myBeans>id>1/id>name>haha/name>email>email/email>
<!--CRLF-->
address>广东/address>生日>brithday>2010-11-22/brithday>/生日>/myBeans>
<!--CRLF-->
/entry>entry>string>user/string>com.hoo.entity.User>name>jack/name>age>23/age>sex>true/sex>
<!--CRLF-->
address>china GuangZhou/address>brithday>2011-04-27 19:02:13.747 CST/brithday>/com.hoo.entity.User>
<!--CRLF-->
/entry>/map>
<!--CRLF-->

6、 转换List集合

/**
<!--CRLF-->
 * function:转换List对象
<!--CRLF-->
 * @author hoojo
<!--CRLF-->
 * @createDate 2011-4-27 下午06:20:02
<!--CRLF-->
 * @return
<!--CRLF-->
 */
<!--CRLF-->
@RequestMapping("/doListXMLXStream")
<!--CRLF-->
public ModelAndView doListXMLXStreamView() {
<!--CRLF-->
    System.out.println("#################ViewController doListXMLXStreamView##################");
<!--CRLF-->
    ModelAndView mav = new ModelAndView("xStreamMarshallingView");
<!--CRLF-->
    ListObject> beans = new ArrayListObject>(); 
<!--CRLF-->
    for (int i = 0; i  3; i++) {
<!--CRLF-->
        Account bean = new Account();
<!--CRLF-->
        bean.setAddress("北京#" + i);
<!--CRLF-->
        bean.setEmail("email" + i + "@12" + i + ".com");
<!--CRLF-->
        bean.setId(1 + i);
<!--CRLF-->
        bean.setName("haha#" + i);
<!--CRLF-->
        Brithday day = new Brithday();
<!--CRLF-->
        day.setBrithday("2010-11-2" + i);
<!--CRLF-->
        bean.setBrithday(day);
<!--CRLF-->
        beans.add(bean);
<!--CRLF-->
        
<!--CRLF-->
        User user = new User();
<!--CRLF-->
        user.setAddress("china GuangZhou 广州# " + i);
<!--CRLF-->
        user.setAge(23 + i);
<!--CRLF-->
        user.setBrithday(new Date());
<!--CRLF-->
        user.setName("jack#" + i);
<!--CRLF-->
        user.setSex(Boolean.parseBoolean(i + ""));
<!--CRLF-->
        beans.add(user);
<!--CRLF-->
    }
<!--CRLF-->
    
<!--CRLF-->
    mav.addObject(beans);
<!--CRLF-->
    return mav;
<!--CRLF-->
}
<!--CRLF-->

在WebBrowser中请求http://localhost:8080/SpringMVC4View/xStream/view/doListXMLXStream.do

结果如下:

list>
<!--CRLF-->
myBeans>id>1/id>name>haha#0/name>email>email0@120.com/email>address>北京#0/address>生日>
<!--CRLF-->
brithday>2010-11-20/brithday>/生日>/myBeans>
<!--CRLF-->
com.hoo.entity.User>name>jack#0/name>age>23/age>sex>false/sex>address>china GuangZhou 广州# 0/address>
<!--CRLF-->
brithday>2011-04-27 19:08:40.106 CST/brithday>/com.hoo.entity.User>
<!--CRLF-->
myBeans>id>2/id>name>haha#1/name>email>email1@121.com/email>address>北京#1/address>生日>
<!--CRLF-->
brithday>2010-11-21/brithday>/生日>/myBeans>
<!--CRLF-->
com.hoo.entity.User>name>jack#1/name>age>24/age>sex>false/sex>address>china GuangZhou 广州# 1/address>
<!--CRLF-->
brithday>2011-04-27 19:08:40.106 CST/brithday>/com.hoo.entity.User>
<!--CRLF-->
myBeans>id>3/id>name>haha#2/name>email>email2@122.com/email>address>北京#2/address>生日>
<!--CRLF-->
brithday>2010-11-22/brithday>/生日>/myBeans>
<!--CRLF-->
com.hoo.entity.User>name>jack#2/name>age>25/age>sex>false/sex>address>china GuangZhou 广州# 2/address>
<!--CRLF-->
brithday>2011-04-27 19:08:40.106 CST/brithday>/com.hoo.entity.User>/list>
<!--CRLF-->

总结,xStream相对jaxb2要简单些。而且相对比较灵活,可以轻易的转换Java普通类型。

下次会介绍castor转换XML、jibx转换XML、Jackson转换JSON 以及自定义Jsonlib视图转换Json。

分享到:
评论

相关推荐

    SpringMVC中整合JSON、XML视图.pdf

    .SpringMVC中整合JSON、XML视图.pdf

    SpringMVC中整合JSON、XML视图.docx

    .SpringMVC中整合JSON、XML视图.docx

    SpringMVC 使用JSON、XML视图

    本文将详细介绍如何在SpringMVC中集成并使用JSON和XML视图,以及相关的库如json-lib、Jackson、xStream、Jibx和Jaxb2。 首先,让我们理解JSON和XML的作用。JSON(JavaScript Object Notation)是一种轻量级的数据...

    springmvc对json支持

    Jackson是Java中最流行的JSON库之一,它提供了解析JSON到Java对象和将Java对象序列化为JSON的能力。 1. **Jackson库**:Jackson库是Spring MVC支持JSON的核心。它包含三个主要模块:`jackson-core`、`jackson-...

    SpringMVC中使用JSON传递数据时用的jar包

    在Spring MVC框架中,JSON(JavaScript Object Notation)是一种常用的数据交换格式,它被广泛用于前后端交互,尤其是在Ajax请求中。JSON因其简洁、易读的特性,成为了现代Web开发中的首选数据格式。本篇文章将深入...

    springmvc-json-lib.rar

    《SpringMVC与JSON库的整合详解》 在现代Web开发中,SpringMVC作为一款强大的MVC框架,被广泛应用于构建企业级的Java应用程序。而JSON作为一种轻量级的数据交换格式,因其易于人阅读和编写,同时也易于机器解析和...

    spring+springMVC+iBatis+Json整合所需jar包

    1. **引入依赖**:在项目中,你需要添加Spring、SpringMVC、iBatis和Json库的jar包。这些jar包包括了框架的基本功能和所需的依赖。 2. **配置Spring**:创建Spring的配置文件,配置Bean、数据源、事务管理器等,...

    springMVC 多视图配置(Jsp Freemarket Json)实例

    在这个"springMVC 多视图配置(Jsp Freemarket Json)实例"中,我们将探讨如何在 SpringMVC 中设置多种视图解析器来支持 Jsp、FreeMarker 和 Json 格式的响应。 **1. 视图解析器 (View Resolver)** 在 SpringMVC ...

    SpringMVC关于json、xml自动转换的原理研究.docx

    SpringMVC是一个强大的Java web框架,它提供了许多高级特性,包括自动将Java对象转换为JSON或XML格式,以便与前端交互。在这个过程中,SpringMVC使用了一种称为“消息转换器”(HttpMessageConverter)的机制。让...

    SpringMVC整合jdbc+json实例

    在这个"SpringMVC整合jdbc+json实例"中,我们将探讨如何将SpringMVC与Java数据库连接(JDBC)以及JSON数据格式相结合,以创建一个功能完善的Web应用。 首先,我们需要理解SpringMVC的核心组件: 1. **...

    SpringMVC整合jdbc+json

    **SpringMVC整合jdbc+json** 是一个典型的后端开发示例,主要展示了如何在SpringMVC框架下,结合JDBC进行数据操作,并利用JSON进行数据传输。这个项目适合初学者学习,它提供了完整的配置和代码,使得可以直接运行。...

    SpringMVC的json依赖jar包

    SpringMVC是Spring框架的一部分,专门用于处理Web应用程序的模型-视图-控制器(MVC)架构。在现代Web开发中,JSON(JavaScript Object Notation)已成为数据交换的主要格式,尤其是在前后端分离的架构中。SpringMVC...

    springMVC+json.zip_JSON_myeclipse_springmvc_数据传递

    SpringMVC作为Spring框架的一部分,提供了强大的模型-视图-控制器(MVC)架构支持,而JSON则是一种轻量级的数据交换格式,常用于前后端的数据传输。接下来,我们将深入探讨如何在MyEclipse环境下,利用SpringMVC框架...

    SpringMVC利用Ajax,JQuery交互Json

    同时,在SpringMVC配置文件中启用Json处理器,例如`dispatcher-servlet.xml`: ```xml &lt;bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter" /&gt; ``` 2. **...

    Maven+springMVC+JSON实例

    1. **创建项目**:首先,使用Maven创建一个新的Java Web项目,设置正确的`pom.xml`文件,引入SpringMVC和相关依赖。 2. **配置SpringMVC**:在`src/main/webapp/WEB-INF`目录下创建`servlet-context.xml`,配置...

    IDEA+Gradle+SpringMVC+Json

    本资源提供了一个基于这些技术的实例Demo,旨在帮助开发者理解如何在IDEA中利用Gradle构建一个整合Spring MVC和Json功能的应用。 首先,我们来看**IntelliJ IDEA**。作为JetBrains公司出品的Java开发工具,IDEA以其...

    sprjson,spring mvc的json和xml视图,dwr及静态资源等不同种类url整合

    spring mvc的json和xml视图,dwr及静态资源等不同种类url整合,对应博客教程地址: http://blog.csdn.net/qgmzzn1/article/details/8465969

    SpringMVC与Hibernate整合所需jar

    本文将详细介绍SpringMVC与Hibernate整合所需的jar文件以及它们在整合过程中的作用。 首先,我们需要理解SpringMVC的核心组件。它包括DispatcherServlet(前端控制器)、HandlerMapping(处理器映射器)、...

    springmvc整合hibernate所需jar包

    首先,"springmvc整合hibernate所需jar包"意味着我们需要确保项目中包含了所有必要的库文件。Spring MVC和Hibernate整合所需的jar包通常包括以下几类: 1. **Spring框架**:包括spring-context、spring-beans、...

Global site tag (gtag.js) - Google Analytics