1. 程式人生 > >使用Struts2寫的介面實現接收json格式的資料

使用Struts2寫的介面實現接收json格式的資料

先說下需求:寫一個介面,接收資料格式是json。

如果使用springMVC實現,非常簡單,方法中使用@RequestBody接收引數 即可,如下:

@ResponseBody
	@RequestMapping(value = "/create" , method = RequestMethod.POST)
	public XXX xxx(@RequestBody String json) {
		xxxxxx
	}
如果對springMVC實現比較感興趣,自己去百度,網上一堆資料。

下面我介紹下使用struts2實現,這方面我找了很多資料,網上資料很雜,自己總結後並且實現了功能。

其實一開始自己的沒弄明白原理,找的資料都是如何從頁面傳遞json到後臺,這並不是我想要的。

我們開發介面是供別人呼叫的,別人在他們專案中直接訪問你的介面url並通過post請求傳遞json資料。我們介面中是要接收json資料並進行解析,可是json是一個整體,如何接收,沒有key..使用谷歌的模擬post請求工具外掛Advanced RestClient除錯後發現,json資料其實是在post請求體中,類似於form表單,只不過json的httppost.setHeader("Content-Type","application/json"),而form表單為httppost.setHeader("Content-Type","application/x-www-form-urlencoded");所以可以獲取post請求體中的內容再進行解析。程式碼如下:

//獲取請求體中的資料
	public String getStrResponse(){
		ActionContext ctx = ActionContext.getContext();
		HttpServletRequest request = (HttpServletRequest)ctx.get(ServletActionContext.HTTP_REQUEST);   
		InputStream inputStream;
		String strResponse = "";
		try {
		inputStream = request.getInputStream();
		String strMessage = "";
		BufferedReader reader;
		reader = new BufferedReader(new InputStreamReader(inputStream,"utf-8"));
		while ((strMessage = reader.readLine()) != null) {
		strResponse += strMessage;
		}
		reader.close();
		inputStream.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return strResponse;
	}
/*XXXX任務介面*/
	public String XXXTask(){
		 //獲取請求體中內容,轉換為json
		JSONObject jsonRequest = JSONObject.fromObject(this.getStrResponse());
		//獲取json中引數
		String accountId1=jsonRequest.getString("account_id");
		Long accountId=Long.parseLong(accountId1);
		String verifyContent=jsonRequest.getString("verify_content");
		String verifyType=jsonRequest.getString("verify_type");
		log.info("獲得請求引數[account_id:"+accountId+",verify_content:"+verifyContent+",verify_type:"+verifyType+"]");
		if("N".equalsIgnoreCase(verifyType)){
			verifyType = "1";
		}else if("A".equalsIgnoreCase(verifyType)){
			verifyType = "2";
		}else if("P".equalsIgnoreCase(verifyType)){
			verifyType = "3";
		}
		//下面為具體業務處理
		xxxxxxxxx
		
		try {
			xxxxxxxxxxxx
			resMap.put(Fields.ERROR_NO_KEY, 0);
			resMap.put(Fields.ERROR_INFO_KEY, "提交xxxx稽核成功");
			log.info("提交xxxx稽核成功");
		} catch (Exception e) {
			e.printStackTrace();
			resMap.put(Fields.ERROR_NO_KEY, -1);
			resMap.put(Fields.ERROR_INFO_KEY, "提交xxxx稽核失敗");
			log.error("提交xxxx稽核失敗");
		}
		return SUCCESS;
	}


測試 傳送引數如下:

{
"account_id": "6",
"verify_content": "資料修改6",
"verify_type": "N"
}

成功接收引數。此時介面完成。

相關推薦

使用Struts2介面實現接收json格式資料

先說下需求:寫一個介面,接收資料格式是json。 如果使用springMVC實現,非常簡單,方法中使用@RequestBody接收引數 即可,如下: @ResponseBody @RequestMapping(value = "/create" , method = R

springmvc接收json格式資料

controller程式碼如下:@RequestMapping(value="/userInfo",method=RequestMethod.POST)@ResponseBodypublic String getUser(@RequestBody User user){   

【php】jquery中$.get實現解析json格式資料及jsonp跨域

一直以來都是寫ajax都是使用$.getjson這個方法,主要圖的就是跨域方便,當然跨域有時候也會帶來不安全的隱患,現在專案中是$get,例子中基本上返回的是string格式,自己寫getjson寫習慣,想返回json格式的。下面就介紹三種實現json格式返回的方法。

Struts2返回json格式資料踩坑記錄

事件起因 昨天提測修改凍結/解凍銀行卡樣式的功能,微姐測試過程中發現呼叫ajax請求耗時過長,今天來排查,發現瀏覽器請求/finance/ajax/freeze/ajaxGetShopLists時,對應的後端方法getShopList()莫名其妙地執行了兩遍,並且返回給瀏覽器的Json字串如下:

與其他系統介面對接(java),json格式資料傳遞···OkHttpClient方式

上一種方式HttpURLConnection方式出現了點問題,就是在idea中啟動服務一切正常。當時用tomcat部署專案時候,對方介面接收引數出現中文亂碼問題。用了很多方式都沒有解決,不知有沒有大佬可以解決 引入依賴 <dependency>

與其他系統介面對接(java),json格式資料傳遞···HttpURLConnection方式

這個操作是與****系統進行資料介面的對接,本系統向****系統傳遞幾個引數,****系統接收並返回值。 目錄 post請求方式 @Service層 工具類ResultUtil pom需要新增的依賴 get請求方式 另一種 OkHttpClient 方式 post

laravel5.7如何實現呼叫json格式介面

介面呼叫,簡單實用,時間有限,附上程式碼與介面文件一段! 一、介面調取整個資料表資料 1、傳輸型別:‘get’; 2、Url:/new/read; 3、傳入引數 <?php public function show(){ $data=DB::table('cours

實現xml和json格式資料——單例模式的Db類(第二篇)

       上一篇只是實現了xml和json格式資料的類的封裝,不過它是沒有資料的來源的;因此,本篇文章是封裝一個呼叫資料庫資料的方法,視訊裡面用的是mysql_connect()等函式,不過現在用這些函式會出現notice,因為這些函式已經過時了,將來可能不會再用到;其實

自定義HTTPMessageConverter接收JSON格式資料

jsp頁面 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); S

從頁面接收json格式資料,在java類裡面進行解析

String jsonStr = {"name":"zfj"                               ,"dd":[{"ddr":"1","encrypt":"2","ff":"1

JSP頁面呼叫介面傳送JSON格式資料

問題描述: 1. 想在JSP頁面測試呼叫後臺介面,這個介面呼叫後需要進行頁面跳轉,所有無法使用Postman等工具 2. 介面接收的是JSON資料格式 在摸索了一番後,直接上可用程式碼片段: <html> <head> <titl

json格式資料,將資料庫中查詢的結果轉換為json, 然後呼叫介面的方式返回json(方式一)

呼叫介面,無非也就是開啟連結 讀取流 將結果以流的形式輸出 將查詢結果以json返回,無非就是將查詢到的結果轉換成jsonObject ============================================================= /***     * 將從資料中取到的結果以jso

ajax傳送json格式資料,呼叫restful介面

ajax傳送json格式資料,關鍵是指定contentType,data要是json格式 如果是restful介面,把type改成對應的post(增)、delete(刪)、put(改)、get(查)即

Python爬取Json格式資料並讀(改中文編碼)

Python Json檔案讀寫 經過測試發現,req.json()返回的型別是dict(字典型別) 如果有興趣的話,可以再加一個正則表示式來篩選出url的關鍵名字,用關鍵名來做檔名。

python中json格式資料輸出實現方式(無unicode編碼輸出形式)

在 http://blog.csdn.net/5iasp/article/details/23338039 的基礎上改進了下 不多說了,直接貼程式碼: # _*_coding:utf-8 _*_ import sys reload(sys) sys.setdefaulten

Asp.net C# 使用Newtonsoft.Json 實現DataTable轉Json格式資料

轉自:http://dongguojun.iteye.com/blog/737890 1.這裡下載:http://www.newtonsoft.com/products/json/  安裝:    1.解壓下載檔案,得到Newtonsoft.Json.dll    2.在

Robotframework實現Dictionary資料Json格式資料自由轉換

在Robotframework中進行介面協議測試時,需要實現Dictionary資料和Json格式資料自由轉換,便於資料構造方便快捷。本文章主要講解如何實現兩者之前的自由轉換。 一、首先Dictionary資料和Json格式資料自由轉換需要依賴python裡面的demjso

framework7實現跨域取得json格式資料

最近做搞一個webapp專案,採用的是framework7的框架,在跨域獲取json資料的時候,老是獲取不到資料,採用jquery的jsonp的話,服務端需要對資料進行處理,後來發現framework7本身有jsonp選項,能直接獲取json資料,非常方便。 重點是,在伺

SpringMVC的介面接收json資料返回json資料並且解析為List物件集合

請求引數實體類 package com.lifuyi.entity; /** * 請求引數**重點內容** */ public class RequestPram { //訂單號 private String orderNum;

HttpServletRequest接收的是Json格式資料的解決辦法

@Override     public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { i