springMvc - 03 基於註解的例子

在非註解的方式中,springmvc.xml文件中需要自己配置處理器映射器,處理器適配器,配置每一個控制器,並且每一個請求就要對應一個控制器類,開發很不方便。

註解方式的主要區別在於springmvc.xml文件的配置和處理器的開發代碼。

1、springmvc.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-4.1.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context-4.1.xsd
    http://www.springframework.org/schema/mvc
    http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd">

    <!--設置處理器掃包範圍-->
    <context:component-scan base-package="rui.web"/>

    <!--讓SpringMvc不處理靜態資源-->
    <mvc:default-servlet-handler />

    <!--開啓自動註冊處理器映射器和處理器適配器-->
    <mvc:annotation-driven />

    <!--配置視圖解析器,視圖解析器用來解析處理器返回的ModelAndView對象-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/jsp"></property>
        <property name="suffix" value=".jsp" ></property>
    </bean>

</beans>

2、處理器開發

在一個控制器內的增加了兩個請求方法,請求地址分別是:

/test/index

/test/indexJson

package rui.web;

import com.fasterxml.jackson.databind.ObjectMapper;
import org.jetbrains.annotations.NotNull;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
import rui.db.Model.ex_Order;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.List;

/*測試控制器*/
@Controller
@RequestMapping(value = "/test")
public class TestController  {

    @RequestMapping(value ="/index",method = RequestMethod.GET)
    public ModelAndView index() throws Exception {
        System.out.println("執行TestController");
        List<ex_Order> orderList = new ArrayList<ex_Order>();
        ex_Order item = new ex_Order();
        item.setOrderId("T006");
        item.setOrderDate(null);
        orderList.add(item);

        //創建返回的視圖對象
        ModelAndView viewResult = new ModelAndView();
        //添加返回的數據和視圖,視圖映射到/WEB-INF/jsp/test/index.jsp視圖
        viewResult.addObject("orderList",orderList);
        viewResult.setViewName("/test/index");
        return  viewResult;
    }

    @RequestMapping(value = "indexJson")
    public void indexJson(HttpServletRequest request, @NotNull HttpServletResponse response) throws  Exception{
        System.out.println("執行TestController");
        List<ex_Order> orderList = new ArrayList<ex_Order>();
        ex_Order item = new ex_Order();
        item.setOrderId("T006");
        item.setOrderDate(null);
        orderList.add(item);

        response.setContentType("text/html;charset=utf-8");
        ObjectMapper jsonTool = new ObjectMapper();
        response.getWriter().write(jsonTool.writeValueAsString(orderList));
    }
}

3、RequestMapping註解

可以標註在方法上,也可以標註在類上方。

RequestMapping主要包括如下的屬性:

public interface RequestMapping extends Annotation {
      // 指定映射的名稱
    public abstract String name();
      // 指定請求路徑的地址
    public abstract String[] value();
      // 指定請求的方式,是一個RequsetMethod數組,可以配置多個方法
    public abstract RequestMethod[] method();
      // 指定所需要的參數及值
    public abstract String[] params();
      // 指定需要包含的請求頭及值
    public abstract String[] headers();
      // 指定數據請求的格式
    public abstract String[] consumes();
      // 指定返回的內容類型
    public abstract String[] produces();
}

複雜的例子:

@RequestMapping(value = {"/modifyGet.do","/modifyGet1.do"}, method={RequestMethod.POST, RequestMethod.GET},
          consumes={"application/json"}, produces={"application/json"}, params={"name=mike","pwd=123456"},headers={"a=1"}) 
public Object addEmpGet()throws Exception {
     
    JSONObject responseObj = new JSONObject();
    responseObj.put("id", 1);
    return responseObj ;
} 

value

請求的的地址,允許配置多個地址。

method

接受的Http方式,允許配置多個方式

params和headers

這兩個屬性的作用是類似的,可以對請求進一步過濾,如果輸入的參數不包含對應的屬性或者屬性的值有錯誤,那麼就會報HTTP Status [404] – [Not Found]的錯誤。

consumes

限定請求提交數據的類型方式,如果方式不匹配,則不盡興響應

produces

限定請求接受的類型,當request請求頭中的(Accept)類型中包含該指定類型纔會返回響應。

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章