1. 程式人生 > >SSM框架+RESTful開發

SSM框架+RESTful開發


什麼是RESTful?

        RESTful架構,就是目前最流行的一種網際網路軟體架構。它結構清晰、符合標準、易於理解、擴充套件方便,所以正得到越來越多網站的採用。RESTful(即Representational State Transfer的縮寫)是一種開發理念,是對於http的很好的詮釋。

        對url進行規範,寫成RESTful格式的url:

        特點:url簡潔,將引數通過url傳入服務端進行處理。

        RESTful對http的方法進行規範,不管是刪除、新增、更新,使用的url是一致的,若要進行刪除,需要設定http的方法為delete,put,post等;

        後臺Controller方法:判斷http方法,若為delete則執行刪除,post執行新增等操作;

        對http的contentType進行規範,請求時指定contentType,要json資料,設定成json格式的type等。

SSM框架 + RESTful開發

搭建SSM環境

        1、需要在專案中新增將結果轉為json資料返回的jar包

        jackson-annotations-2.8.4.jar

        jackson-core-2.8.4.jar

        jackson-databind-2.8.4.jar

        如果不新增這3個jar包,會輸出錯誤如下:

        java.lang.IllegalArgumentException:No converter found for return value of type

         jackson-2.9.4.jar包將上述的3個jar包整合在一起。

        2、springmvc前端控制器的配置

  1. <!-- springmvc配置前端控制器 -->
  2. <servlet>
  3. <servlet-name>springmvc</servlet-name>
  4. <servlet-class>org.springframework
    .web.servlet.DispatcherServlet</servlet-class>
  5. <!--contextConfigLocation配置springmvc載入的配置檔案(配置檔案裡面配置處理器介面卡,處理器等等),如果不配置contextConfigLocation,則預設載入/WEB-INF/servlet名稱-servlet.xmlspringmvc-servlet.xml)-->
  6. <init-param>
  7. <param-name>contextConfigLocation</param-name>
  8. <param-value>classpath:spring/springmvc.xml</param-value>
  9. </init-param>
  10. </servlet>
  11. <servlet-mapping>
  12. <servlet-name>springmvc</servlet-name>
  13. <!-- 第一種: .action,所有以.action結尾的訪問,都由DispatcherServlet解析
  14. 第二種:/ ,所有訪問的地址都由DispatcherServlet解析,對於這種配置會出現一個問題,那就是靜態檔案的訪問不需要,DispatcherServlet進行解析(因為訪問靜態檔案直接返回即可,不用再由處理器處理)。但是這種方式可以實現RESTful風格的url
  15. 第三種:/* ,這種配置不對,使用這種配置,最終要轉發到一個jsp頁面時,仍然會由DispatcherServlet解析jsp的地址,不能根據jsp的頁面找到Handler,會報錯-->
  16. <url-pattern>/</url-pattern>
  17. </servlet-mapping>

        注意:要實現RESTful風格的url則需要配置:<url-pattern>/</url-pattern>同時需要解決靜態資源直接返回,不需要解析的問題,需要在springmvc.xml中新增資源對映:

        <!– 靜態資源對映 –>
        <mvc:resources location=”/js/”mapping=”/js/” />
        <mvc:resources location=”/css/”mapping=”/css/
” />
        <mvc:resources location=”/img/”mapping=”/img/” />
        <mvc:resources location=”/fonts/”mapping=”/fonts/
” />

        或者也可以springmvc.xml配置檔案中使用<mvc:default-servlet-handler/> 配置該指令放行預設的靜態資源。

應用例項

1、需求:查詢商品資訊,返回json資料。

編寫mapper和service介面以及實現類

ItemsMapper.xml

  1. <!-- 根據商品id查詢商品資訊 -->
  2. <select id="selectItemsById" parameterType="int" resultType="com.zxt.ssm.po.Items">
  3. select * from items where id=#{id}
  4. </select>

ItemsMapper.java

  1. // 根據商品id獲取商品資訊
  2. public Items selectItemsById(intid) throwsException;

ItemsService介面

  1. /
  2. * @Description: 根據商品id獲取商品資訊
  3. @param id:使用int無法判斷是否為空,所以一般使用Integer
  4. /
  5. public ItemsCustom selectItemsById(Integer id) throws Exception;

ItemsServiceImpl新增介面實現

  1. @Override
  2. public ItemsCustom selectItemsById(Integer id) throws Exception {
  3. Items items = itemsMapper.selectItemsById(id);
  4. /
  5. 中間對商品資訊進行業務處理,返回Items的擴充套件類:ItemsCustom
  6. * 例如商品類中只有生產日期,而沒有是否過期的資訊,可以做一定的操作得到該資訊,封裝到ItemsCustom,顯示給使用者
  7. /
  8. ItemsCustom itemsCustom = new ItemsCustom();
  9. // 將Items中的屬性複製到ItemsCustom中
  10. BeanUtils.copyProperties(items, itemsCustom);
  11. return itemsCustom;
  12. }

2、controller

        定義一個方法:使用url模板對映,進行url對映,使用REST風格的url,能將查詢商品資訊的id傳入controller,輸出json,使用@ResponseBody將java物件輸出為json至前端頁面。

  1. @Controller
  2. public class TestController {
  3. @Autowired
  4. private ItemsService itemsService;
  5. @RequestMapping("/itemsview/{id}")
  6. public @ResponseBody ItemsCustom findItemsById(@PathVariable("id")Integer id) throws Exception {
  7. ItemsCustom itemsCustom = itemsService.selectItemsById(id);
  8. return itemsCustom;
  9. }
  10. }

        ”/itemsview/{id}”這裡的{id}傳入到(@PathVariable(“id”)Integer id) 的id裡面。

        如果有多個引數,例如增加name欄位:@RequestMapping(“/itemsview/{id}/{name}”)

   (@PathVariable(“id”)Integer id ,  @PathVariable(“name”) String diffname ),return itemsCustom會經過@ResponseBody註解轉換為json資料格式。

3、測試,瀏覽器輸入:

常見問題總結

資料轉換

    Java中沒有將資料轉換成JSON格式的jar包,所以需要依賴外部jackson包,否則會出現:java.lang.IllegalArgumentException錯誤。

靜態資源訪問處理

        採用RESTful架構後,必須將web.xml中控制器攔截的請求設定為‘/ ’;但是這樣會產生一個問題,就是會將css,js,圖片等靜態資源攔截,發生404錯誤。

        解決方案如下:

        方法一:配置<mvc:resources/>

        springmvc配置檔案中這樣使用:<mvc:resources mapping=”請求URI” location=”資源位置”>。

        方法二:在springmvc配置檔案中使用<mvc:default-servlet-handler/>配置該指令放行預設的靜態資源。

版本不相容問題

        當出現spring版本和java jdk版本不相容時也會出現:java.lang.IllegalArgumentException異常。

        通常來說spring3.x版本對應JDK7.0及以下版本,使用spring4.x以後版本,可以使用JDK8.0

        右擊專案—> properties —>project facets : 修改JDK版本,需要將1.8降為1.7版本。

SSM中常用註解

@RequestMapping

        通過RequestMapping註解可以定義不同的處理器對映規則。

        @RequestMapping(value=”/items”)或@RequestMapping(“/items),value的值是陣列,可以將多個url對映到同一個方法。

窄化請求對映

        在class上新增@RequestMapping(url)指定通用請求字首, 限制此類下的所有方法請求url必須以請求字首開頭,通過此方法對url進行分類管理。

請求方法限定

        1、限定GET方法:@RequestMapping(method = RequestMethod.GET)

        如果通過Post訪問則報錯:HTTP Status 405 - Request method ‘POST’ not supported

        例如:@RequestMapping(value=”/editItems”,method=RequestMethod.GET)

        2、限定POST方法:@RequestMapping(method =RequestMethod.POST)

        如果通過Post訪問則報錯:HTTP Status 405 - Request method ‘GET’ not supported

        3、GET和POST都可以:@RequestMapping(method={RequestMethod.GET,RequestMethod.POST})

@PathVariable

        @PathVariable對映 URL 繫結的佔位符,帶佔位符的URL 是 Spring3.0 新增的功能,該功能在SpringMVC向 REST 目標挺進發展過程中具有里程碑的意義。通過@PathVariable 可以將 URL 中佔位符引數繫結到控制器處理方法的入參中:URL中的 {xxx} 佔位符可以通過@PathVariable(“xxx“)繫結到操作方法的入參中。

  1. /*
  2. * @RequestMapping(value = "user/login/{id}/{name}/{status}") 中的 {id}/{name}/{status}
  3. * 與 @PathVariable int id、@PathVariable Stringname、@PathVariableboolean status
  4. * 一一對應,按名匹配。
  5. */
  6. @RequestMapping(value = "user/login/{id}/{name}/{status}")
  7. @ResponseBody
  8. // @PathVariable註解下的資料型別均可用
  9. public User login(@PathVariable int id, @PathVariableString name, @PathVariable boolean status) {
  10.     // 返回一個User物件響應ajax的請求
  11. returnnew User(id, name, status);
  12. }

@ResponseBody

        @Responsebody註解表示該方法的返回的結果直接寫入 HTTP 響應正文(ResponseBody)中,一般在非同步獲取資料時使用,通常是在使用@RequestMapping 後,返回值通常解析為跳轉路徑,加上@Responsebody 後返回結果不會被解析為跳轉路徑,而是直接寫入HTTP 響應正文中。

        作用:該註解用於將Controller的方法返回的物件,通過適當的HttpMessageConverter轉換為指定格式後,寫入到Response物件的body資料區。

        使用時機:返回的資料不是html標籤的頁面,而是其他某種格式的資料時(如json、xml等)使用。

@RequestBody

        @RequestBody註解則是將 HTTP 請求正文插入方法中,使用適合的HttpMessageConverter 將請求體寫入某個物件。

        作用:1)、該註解用於讀取Request請求的body部分資料,使用系統預設配置的HttpMessageConverter進行解析,然後把相應的資料繫結到要返回的物件上;

        2)、再把HttpMessageConverter返回的物件資料繫結到controller中方法的引數上。

        使用時機:

        A)、GET、POST方式提時,根據requestheader Content-Type的值來判斷:

        application/x-www-form-urlencoded,可選(即非必須,因為這種情況的資料@RequestParam,@ModelAttribute也可以處理,當然@RequestBody也能處理);

        multipart/form-data,不能處理(即使用@RequestBody不能處理這種格式的資料);

        其他格式,必須(其他格式包括application/json,application/xml等。這些格式的資料,必須使用@RequestBody來處理);

        B)、PUT方式提交時,根據requestheader Content-Type的值來判斷:

        application/x-www-form-urlencoded,必須;multipart/form-data,不能處理;其他格式,必須;

        說明:request的body部分的資料編碼格式由header部分的Content-Type指定。

  1. @RequestMapping(value = "user/login")
  2. @ResponseBody
  3. // 將ajax(datas)發出的請求寫入 User 物件中
  4. public User login(@RequestBody User user){
  5.     // 這樣就不會再被解析為跳轉路徑,而是直接將user物件寫入 HTTP 響應正文中
  6. return user;
  7. }

@RequestParam

        使用@RequestParam常用於處理簡單型別的繫結。當形參名稱與頁面提交的引數的名稱不一致時就要使用這個註解。

        value:引數名字,即入參的請求引數名字,如value=“item_id”表示請求的引數區中的名字為item_id的引數的值將傳入;

        required:是否必須,預設是true,表示請求中一定要有相應的引數,否則將報:TTP Status 400 - RequiredInteger parameter ‘XXXX’ is not present

        defaultValue:預設值,表示如果請求中沒有同名引數時的預設值。

  1. // 商品修改頁面的展示
  2. @RequestMapping("/editItems")
  3. public ModelAndView editItems(@RequestParam(value = "id", required = true) Integer item_id) throws Exception {
  4. }

        形參名稱為item_id,但是這裡使用value=”id”限定請求的引數名為id,所以頁面傳遞引數的名必須為id。

        注意:如果請求引數中沒有id將跑出異常:HTTP Status 500 - RequiredInteger parameter ‘item_id’ is not present這裡通過required=true限定id引數為必需傳遞,如果不傳遞則報400錯誤,可以使用defaultvalue設定預設值,即使required=true也可以不傳id引數值。


相關推薦

SSM框架+RESTful開發

什麼是RESTful?        RESTful架構,就是目前最流行的一種網際網路軟體架構。它結構清晰、符合標準、易於理解、擴充套件方便,所以正得到越來越多網站的採用。RESTful(即Representational State Transfer的縮寫)是一種開發理念,是對於http的很好的詮釋。 

maven工程搭建ssm框架詳細開發流程

一.開啟eclipse建立maven工程 這裡不多說了 二.在pom.xml里加入jar包 注意不同版本之間的jar包可能會有衝突,也不要全都加最新版本的jar包,到時解決起來很麻煩 直接點選官網搜尋jar包名下載相應jar包 基本所需的jar包給大家發出來

ssm框架學習---開發中使用springMVC接收引數的問題

首先說下什麼是引數繫結:從客戶端的請求key-value,經過引數繫結,將資料繫結到controller的方法形參上 過程:客戶端請求----處理器介面卡呼叫springmvc提供的引數繫結組建將key/value資料轉化成controller方法的形參上(引數繫結組建,現

Java基於ssm框架restful應用開發

unicode ray -c mat after 內容 XP nco restful Java基於ssm框架的restful應用開發 好幾年都沒寫過java的應用了,這裏記錄下使用java ssm框架、jwt如何進行rest應用開發,文中會涉及到全局異常攔截處理、jwt校驗

SSM框架RESTful風格的實現

層次 article delet 註解 服務器 ppi ble req variable REST這個詞,是Roy Thomas Fielding在他2000年的博士論文中提出的。 如果一個架構符合REST原則,就稱它為RESTful架構。 REST,即Representa

SSM框架開發web項目系列(六) SpringMVC入門

商品 rwx tmx quest npv you odm pci vdp   前言   我們最初的javaSE部分學習後,基本算是入門了,也熟悉了Java的語法和一些常用API,然後再深入到數據庫操作、WEB程序開發,漸漸會接觸到JDBC、Servlet/Jsp之類的知識,

使用SSM框架開發企業級應用~Chapter01-初始MyBatis

art resource tty 破解 sele 存儲 方法 select 絕對路徑 什麽是MyBatis? MyBatis是一個開源的數據持久層框架,內部封裝了通過JDBC訪問數據庫的操作,支持普通的SQL查詢,存儲過程和高級映射,幾乎消除了所有的JDBC代碼和參數的

JavaEE互聯網輕量級框架整合開發(書籍)閱讀筆記(2):SSM+Redis概念理解

重復 技術 理解 size 從數據 一個 ron bat 互聯網 一、SSM+Redis的結構圖 在Java互聯網中,以Spring+SpringMVC+MyBatis(SSM)作為主流框架,SSM+Redis的結構圖如下: 二、下面介紹它們各自承擔的功能: 1.S

Java開發SSM框架微信支付

etc ray 企業 展示 system 都在 pes generator 程序開發 微信小程序的Java支付開發一直是一塊坑,網上的教程也是琳瑯滿目。筆者六月的時候接觸到了微信的小程序開發摸到了微信支付方面的東西,騰訊的官方文檔也是一言難盡很多地方看不懂,而且官方也沒有提

基於dubbo的分散式專案框架搭建 開發工具idea (springboot+dubbo+zookeeper+redis+rabbitmq+基於Swagger2的restful api) --(二)

1.dubbo-admin 2.5.8的安裝 http://dubbo.apache.org/en-us/index.html 點選GITHUB 跳轉到github下載dubbo原始碼  點選Branch切換到Tags,找到對應的2.5.8版本,下載該版本,下載解壓完以後

基於dubbo的分散式專案框架搭建 開發工具idea (springboot+dubbo+zookeeper+redis+rabbitmq+基於Swagger2的restful api) --(一)

1. spring-boot web框架下載配置 https://start.spring.io/ 點選Switch to the full version  勾選詳細的配置   根據需要更改group atrifact...等資訊 &nb

基於dubbo的分散式專案框架搭建 開發工具idea (springboot+dubbo+zookeeper+redis+rabbitmq+基於Swagger2的restful api) --(四)

1.rabbitmq的整合 首先在配置檔案裡增加 #rabbitMQ spring.rabbitmq.host=127.0.0.1 spring.rabbitmq.port=5672 spring.rabbitmq.username=root spring.rabbitmq.password

基於dubbo的分散式專案框架搭建 開發工具idea (springboot+dubbo+zookeeper+redis+rabbitmq+基於Swagger2的restful api) --(三)

1.dubbo註冊中心zookeeper 的安裝 http://mirrors.shu.edu.cn/apache/zookeeper/ 選擇對應的版本下載即可 修改zoo_sample.cfg為zoo.cfg(可以先備份一份) 在安裝目錄新建data和log目錄 修改zo

Eclipse開發工具+SSM框架

開發環境: Win10 (64位) jdk1.8.0_121 (64位) apache-tomcat-7.0.62-windows-x64 apache-maven-3.3.9 eclipse-jee-oxygen-1a-win32-x86_64    

Java開發SSM框架微信退款

這篇文章是Java微信退款的教程,退款之前使用者需要先進行支付,支付之後才可以使用退款。做到退款的同學應該已經是完成了支付了,我寫的退款和支付的流程很相似只是所需的引數有所不同。 String outTradeNo = request.getParamete

使用IDEA基於springboot開發ssm框架(undertow代替tomcat以及其他功能)

在這裡,第二次使用springboot開發,看過我之前的文章可知。因為spirngboot是去除xml等繁瑣配置,大部分內容都已經幫你設定好,因此需要有一定的spring基礎才能學習,不然不明白原理會難以下手。 文件結構圖 1. pom.xml需要引入的依賴

【使用SSM框架開發企業級應用】Spring核心概念

Spring核心概念 單詞 Inversion倒置 Control控制 Dependency從屬 Injection注入 Adpect-oriented面向切面 Programming程式程式設計 Advice忠告 Aspect方向 Alliance聯合

【使用SSM框架開發企業級應用】Spring MVC體系結構和處理請求控制器

Spring MVC體系結構和處理請求控制器 MVC設計模式 檢視(View)-對應元件:JSP或者HTML檔案 控制器(Controller)-對應元件:Servlet 模型(Model) -對應元件:JavaBean JSP Model1 JSP Mo

《使用SSM框架開發企業級應用》第一章 初始MyBatis

單詞 MyBatis框架   SqlSessionFactory工廠   SqlSessionFactoryBuider構造器 SqlSession使用   Configuration配置  Mapper對映  Environment環境 Property性質    D

[原始碼和文件分享]基於JSP技術和SSM框架的Web聊天系統的設計和開發

摘 要 隨著當今社會經濟的飛速發展和地球村的建設,現在的人們在平常的生活中由於平常的工作生活等原因,造成了許多親朋長時間無法見面的情況。溝通交流的缺失造成了許多人感情的淡薄。而在現在飛速發展的網路技術的支援下,越來越多的人選擇通過網路即時通訊系統來進行每天的溝通,常用的PC端的QQ,移動端的微信