Intellij14搭建SpringMVC+Mytatis框架整合和调用测试

这篇博客拖了2个星期才开始写,实在是忙的。
前两篇博客Mybatis,SpringMVC已经分别介绍了在Intellij14上搭建框架的方法,这篇文章会介绍以下内容:

  1. 如何将两个框架整合起来(其实很简单,但是可能实例代码与前两篇稍有不同)
  2. 实现一个上一篇文章中没有实现的POST接口
  3. Java中调用接口的方法

两个框架的整合:

这一部分没有新的内容,按照前两篇博客的步骤全都做完之后,我们会有两个`xml`配置文件,`spring-mybatis.xml`和`mvc-dispatcher-servlet.xml`,前者暂时只有在Test方法中通过spring注释`@ContextConfiguration(locations = {"classpath:spring-mybatis.xml"})`使用,后者已经在`web.xml`中被web容器管理起来了。所以为了完成整合为一个web服务程序的目标,要把前者也管理起来,我们把`spring-mybatis.xml`也放入`WEB-INF`下的`spring`文件夹下,然后管理`web.xml`如下(我把`mvc-dispatcher-servlet.xml`重命名为`spring-servlet.xml`了):    
    
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

    <servlet>
        <servlet-name>MESServiceservlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServletservlet-class>
        <init-param>
            <param-name>contextConfigLocationparam-name>
            <param-value>/WEB-INF/spring/spring-servlet.xmlparam-value>
        init-param>
        <load-on-startup>1load-on-startup>
    servlet>

    <servlet-mapping>
        <servlet-name>MESServiceservlet-name>
        <url-pattern>/url-pattern>
    servlet-mapping>

    <context-param>
        <param-name>contextConfigLocationparam-name>
        <param-value>/WEB-INF/spring/spring-mybatis.xmlparam-value>
    context-param>

    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListenerlistener-class>
    listener>

web-app>

然后为了保证Test的正常使用,我们把spring文件夹也设置为Resources,至此Mybatis+SpringMVC就算整合完毕了,如果按照前两篇博客的步骤成功配置并测试成功的,这一步应该是水到渠成了。


实现一个POST接口:

我们还是在上一篇博客中的Controller中创建这个方法吧。
 package com.gcoreinc.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
@RequestMapping("/home")
public class HelloController {

    //@RequestMapping("/hello")
    //@ResponseBody
    //public String sayHello(){
    //    return "Hello World!";
    //}
    //以上是上一篇文章的方法,这里我完善一下
    @RequestMapping(path = "/hello", method = RequestMethod.GET)
    @ResponseBody
    public String sayHello(){
        return "Hello World!";
    }
    //这是一个POST方法
    @RequestMapping(path = "/newworld", method = RequestMethod.POST)
    public void addWorld(@RequestBody World world) {//World类自己创建一个,发挥一下想象力
        System.out.println(boxDetail);
        //调用Service中的add方法
    }
}

至此接口创建成功,启动你的Tomcat服务器吧!


Java中调用接口:

如果是有Android开发经验的可以关掉界面了。
原来是想介绍一下OkHttp的,奈何这玩意儿支持JDK7以上,而我公司的还是6,所以,只能自己动手丰衣足食了。
其实就是使用HttpURLConnection来获取HTTP链接。获取一个GET请求的接口可以是这样的(以上面的helloworld为例):

public void helloWorld(){
    URL url = new URL(http://127.0.0.70:8080/TestSpringMVC/home/hello);
    HttpURLConnection conn = url.openConnection();
    conn.setRequestMethod("GET");
    conn.connect();
    if (conn.getResponseCode() == CON_SUC) {
        BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
        String line = null;
        while (null != (line = reader.readLine())) {
            result.append(line);
        }
        reader.close();
        conn.disconnect();
     }
     System.out.println(result.toString());
}

请求一个POST接口的代码如下:

public void newWorld(){
    //准备JSON数据,这里我们用google的开源框架`Gson`,用maven下一个就好
    //World类自己创建,建议与服务器的World相同,而且如果你是新手,请不要使用诸如Date,TimeStamp作为属性类型
    World world = new World();
    world.setName("XiWorld");
    world.setGod("XiWenRen");
    world.setProgramable(false);
    Gson gson = new Gson();
    String json = gson.toJson(world);
    URL url = new URL(http://127.0.0.70:8080/TestSpringMVC/home/newworld);
    HttpURLConnection conn = url.openConnection();
    conn.setRequestMethod("POST");
    conn.setDoInput(true);
    conn.setDoOutput(true);
    conn.setRequestProperty("Content-Type", "application/json");
    conn.connect();
    DataOutputStream dataOutputStream = new DataOutputStream(conn.getOutputStream());
    dataOutputStream.writeBytes(jsonData);
    dataOutputStream.flush();
    dataOutputStream.close();
}
查看一下服务器控制台的输出,应该就能正确输出world的值
此处注意:`@RequestBody`注释会自动把Controller接受到的json字符串转换为World对象,所以必须保证World类在服务器端存在

后记:

由于距离项目整合完已经过了两个星期才写这篇博客,项目状态已经不同了,所以没有更详细的步骤的截图,但是这个部分相对没有什么坑,应该很容易就过去了。然后由于没有用IDEA边测边写,以上代码都是无测试纯手打,未免有疏漏之处,欢迎大家指正。
因为现在在使用Gson的过程中遇到一些坑,还没解决,所以下一篇博客会和大家分享一下Gson的详细用法。

你可能感兴趣的:(spring,mybatis)