web框架返回json(web開發中api返回的數據結構)

本文目錄一覽:

guns框架返回json格式?

你說的這個問題是可以解決的。

印象中是把空json返回了一個空的字元串。這可能導致你前端處理json轉model時報錯,應該是這個問題吧?

這個你需要在工程里搜一下,它確實有特殊處理,改一下就好了。

哪種python json框架做iOS APP後台服務最好

如果你只需要一個可以返回json格式數據的python框架,那麼python所有的web框架都是可以的,django,flask,webpy,bottle等等都是可以的,選一個你熟悉的就可以了。

如果解決了您的問題請採納!

如果未解決請繼續追問

webservice 返回json 介面 案例

問題:

我將結果內容用字元串拼接成Json數據並返回的時候,會在結果前面添加xml頭部,結果如下。

產生如上數據的Webservice介面代碼如下。

解決方案:

改變數據的返回方式,用 Context.Response.Write代替return 語句,修改GetQrCodeList方法如下即可返回正確的Json格式數據。

返回結果如下:

JAVA 開發 怎麼讓webservice輸出 json格式字元串?

你可以這樣!!Java的Servlet裡面的response有個Writer是專門向向前台寫東西的。也可以寫Object。然後你可以觀察下JSON的規則:

1.有一種是這樣的:

{‘3′,’54’,’54’}這是最簡單的一種JSON

你可以觀察到,這種寫法和數組的寫法還有List轉換成toString後的寫法是一模一樣的,所以當你需要向前台傳送一個列表的時候,就可以使用Writer.write(list)這種寫法,然後前台使用Ajax接收下就可以了。

2.有一種是這樣的:

{name:”ewhq”,password:”dashk”}

你可以觀察到,這種寫法和Java裡面的map轉換成toString後的寫法是一模一樣的,那麼你需要傳輸這樣的格式的時候,就直接writer.write(map),就可以了,toString也不需要寫,會幫你自動轉換的。

一般來說,兩種格式都是會結合起來的,當你需要傳輸一個表格的內容時:那麼假設內容是這樣

username password

________________

name1 pass1

name2 pass2

這樣,你使用兩個map來存儲這兩條數據

然後再使用List把兩個Map加入進去,這個時候,數據就變成了

{{username:”name1″,password:’pass2′},{username:”name2″,password:”pass2″}}

然後,既然你做過XML的,那麼後面就應該懂得怎麼做了吧!

struts2怎麼返回json數據

如果是作為客戶端的HTTP+JSON介面工程,沒有JSP等view視圖的情況下,使用Jersery框架開發絕對是第一選擇。而在基於Spring3 MVC的架構下,對HTTP+JSON的返回類型也有很好的支持。但是,在開發工作中,對功能的升級是基於既定架構是很常見的情況。本人碰到需要用開發基於Struts2的HTTP+JSON返回類型介面就是基於既定框架結構下進行的。

Struts2返回JSON有兩種方式:1.使用Servlet的輸出流寫入JSON字元串;2.使用Struts2對JSON的擴展。

一.使用Servlet的輸出流

JSON介面的實質是:JSON數據在傳遞過程中,其實就是傳遞一個普通的符合JSON語法格式的字元串而已,所謂的「JSON對象」是指對這個JSON字元串解析和包裝後的結果。

所以這裡只需要將一個JSON語法格式的字元串寫入到Servlet的HttpServletResponse中,這裡使用的是PrintWriter的方式,當然也可以採用Stream流的方式。需要注意的是:在調用getWriter之前未設置編碼(既調用setContentType或者setCharacterEncoding方法設置編碼), HttpServletResponse則會返回一個用默認的編碼(既ISO-8859-1)編碼的PrintWriter實例。這樣就會造成中文亂碼。而且設置編碼時必須在調用getWriter之前設置,不然是無效的。

編寫介面代碼:

這裡的方法與一般的Struts2方法的區別是這裡是void返回類型。

Java代碼  

public void write() throws IOException{

HttpServletResponse response=ServletActionContext.getResponse();

/*

* 在調用getWriter之前未設置編碼(既調用setContentType或者setCharacterEncoding方法設置編碼),

* HttpServletResponse則會返回一個用默認的編碼(既ISO-8859-1)編碼的PrintWriter實例。這樣就會

* 造成中文亂碼。而且設置編碼時必須在調用getWriter之前設置,不然是無效的。

* */

response.setContentType(“text/html;charset=utf-8”);

//response.setCharacterEncoding(“UTF-8”);

PrintWriter out = response.getWriter();

//JSON在傳遞過程中是普通字元串形式傳遞的,這裡簡單拼接一個做測試

String jsonString=”{\”user\”:{\”id\”:\”123\”,\”name\”:\”張三\”,\”say\”:\”Hello , i am a action to print a json!\”,\”password\”:\”JSON\”},\”success\”:true}”;

out.println(jsonString);

out.flush();

out.close();

}

配置action

從以下的配置中可以明顯的看到配置與普通的action配置沒有任何區別,只是沒有返回的視圖而已。

Java代碼  

action name=”write” class=”json.JsonAction” method=”write” /

返回值

Console代碼  

{“user”:{“id”:”123″,”name”:”張三”,”say”:”Hello , i am a action to print a json!”,”password”:”JSON”},”success”:true}

二.使用Struts2對JSON的擴展

要使用這個擴展功能肯定需要添加支持包。經過本人的調試,這裡有兩種選擇:

1.   xwork-core-2.1.6.jar和struts2-json-plugin-2.1.8.jar。如果你想使用struts2-json-plugin-2.1.8.jar這種支持方式,你的xwork-core-*.jar不能選擇2.2.1及以上版本,因為xwork-core-*.jar的2.2.1及以上版本中沒有了org.apache.commons.lang等包。啟動tomcat的時候會出現:java.lang.NoClassDefFoundError: org.apache.commons.lang.xwork.StringUtils。

2.   xwork-2.1.2.jar和jsonplugin-0.34.jar。如果想用jsonplugin-0.34.jar這種支持方式,那需要切換你的xwork-core-*.jar為xwork-2.1.2.jar。因為jsonplugin-0.34.jar需要com.opensymphony.xwork2.util.TextUtils

這個類的支持。而xwork-core-*.jar的2.2.1以上版本均為找到該類,且在xwork-core-2.1.6.jar中也沒有該類。

最後說一句,還因為用原始構建方式而不停蹚雷,確實不值得,真心累。使用Maven等自動化構件方式,會在很大程度上避免依賴包間的版本差異的bug。第三節的「struts2零配置」中會使用maven的構件方式。

編寫介面代碼

該類中json()方法就是普通Struts2的方法。在這裡沒有看到任何JSON格式的字元串,因為我們將要把這項工作交給擴展去完成。在沒有任何設定的情況下,改類下的所有getter方法的返回值將被包含在返回給客戶端的JSON字元串中。要剔除不需要包含的屬性,在類結構結構中需要在getter方法上使用@JSON(serialize=false)進行註解,當然在不影響其他業務的時候也可以直接去掉這個getter方法。所以本例中的返回結果是將dataMap對象轉換成的JSON格式的字元串。

Java代碼  

package json;

import java.util.HashMap;

import java.util.Map;

import org.apache.struts2.json.annotations.JSON;

import com.opensymphony.xwork2.ActionSupport;

/**

* JSON測試

*

* @author Watson Xu

* @date 2012-8-4 下午06:21:01

*/

public class JsonAction extends ActionSupport{

private static final long serialVersionUID = 1L;

private MapString,Object dataMap;

private String key = “Just see see”;

public String json() {

// dataMap中的數據將會被Struts2轉換成JSON字元串,所以這裡要先清空其中的數據

dataMap = new HashMapString, Object();

User user = new User();

user.setName(“張三”);

user.setPassword(“123”);

dataMap.put(“user”, user);

// 放入一個是否操作成功的標識

dataMap.put(“success”, true);

// 返回結果

return SUCCESS;

}

public MapString, Object getDataMap() {

return dataMap;

}

//設置key屬性不作為json的內容返回

@JSON(serialize=false)

public String getKey() {

return key;

}

}

 

配置aciton

在配置中,首先需要action所在的package繼承了json-default,或者繼承的父包繼承了json-default。這配置action的返回類型的type為json,並且可以配置其序列化的屬性等一些類參數

Xml代碼  

?xml version=”1.0″ encoding=”UTF-8″ ?

!DOCTYPE struts PUBLIC

“-//Apache Software Foundation//DTD Struts Configuration 2.0//EN”

“”  

struts

package name=”json” extends=”struts-default,json-default” 

action name=”json” class=”json.JsonAction” method=”json”

result type=”json”

!– 這裡指定將被Struts2序列化的屬性,該屬性在action中必須有對應的getter方法 —

param name=”root”dataMap/param

/result

/action

/package

/struts

返回值

Console代碼  

{“success”:true,”user”:{“name”:”張三”,”password”:”123″}}

三. Struts2零配置使用方法,使用Maven構件:

3.1) 建立一個webapp,這裡還是採用Maven構建,構建過程參考limingnihao的blog: 使用Eclipse構建Maven的SpringMVC項目 。

3.2) 添加Struts2的依賴、struts2零配置依賴和struts2的json依賴:

Xml代碼  

dependencies

!– struts2核心依賴 —

dependency

groupIdorg.apache.struts/groupId

artifactIdstruts2-core/artifactId

version2.3.4/version

typejar/type

scopecompile/scope

/dependency

!– struts2零配置依賴 —

dependency

groupIdorg.apache.struts/groupId

artifactIdstruts2-convention-plugin/artifactId

version2.3.4/version

typejar/type

scopecompile/scope

/dependency

!– struts2的json依賴 —

dependency

groupIdorg.apache.struts/groupId

artifactIdstruts2-json-plugin/artifactId

version2.3.4/version

typejar/type

scopecompile/scope

/dependency

/dependencies

經過測試,上面的依賴包間沒有出現版本兼容的bug,不僅僅因為他們是同一個版本,更加得益於Maven的自動構建方式。

3.3) 配置web.xml,啟用Struts2:

Xml代碼  

?xml version=”1.0″ encoding=”UTF-8″?

web-app version=”2.5″ xmlns=””  

xmlns:xsi=””  

xsi:schemaLocation=”   

”  

filter

filter-nameStrutsPrepareAndExecuteFilter /filter-name

filter-classorg.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter /filter-class

init-param

param-nameconfig/param-name

param-valuestruts-default.xml,struts-plugin.xml,struts.xml/param-value

/init-param

/filter

filter-mapping

filter-nameStrutsPrepareAndExecuteFilter/filter-name

url-pattern/*/url-pattern

/filter-mapping

/web-app

3.4)配置struts.xml,設置一些基本常量和應用:

Xml代碼  

?xml version=”1.0″ encoding=”UTF-8″ ?

!DOCTYPE struts PUBLIC

“-//Apache Software Foundation//DTD Struts Configuration 2.0//EN”

“”  

struts

package name=”base” extends=”json-default,struts-default”

!– 這裡可以設置一些全局的返回值映射關係等 —

/package

constant name=”struts.action.extension” value=”” /

constant name=”struts.ui.theme” value=”simple” /

constant name=”struts.i18n.encoding” value=”utf-8″ /

constant name=”struts.multipart.maxSize” value=”1073741824″/

constant name=”struts.devMode” value=”false”/

/struts

3.5)編寫和配置Action。由並未指定Convention進行設置,所以對於Convention插件而言,默認的它會把所有類名以Action結尾的java類當成Action處理:

Java代碼  

package watson.action;

import java.util.HashMap;

import java.util.Map;

import org.apache.struts2.convention.annotation.Action;

import org.apache.struts2.convention.annotation.Namespace;

import org.apache.struts2.convention.annotation.ParentPackage;

import org.apache.struts2.convention.annotation.Result;

import org.apache.struts2.convention.annotation.Results;

@ParentPackage(“base”)

@Namespace(“/watson”)

@Results({

@Result(name = “json”,type=”json”, params={“root”,”msg”})

})

public class JsonAction {

@Action(value=”json”)

public String json() {

msg = new HashMapString, Object();

msg.put(“flag”, “success”);

MapString, String user = new HashMapString, String();

user.put(“name”, “張三”);

user.put(“age”, “34”);

msg.put(“user”, user);

return “json”;

}

//==================================

private MapString, Object msg;

public MapString, Object getMsg() {

return msg;

}

}

3.6)部署項目,啟動容器,瀏覽器地址欄中輸入:。等到結果如下:

Json代碼  

{“flag”:”success”,”user”:{“age”:”34″,”name”:”張三”}}

從上面結果可知在啟用了零配置以後,只是少了在xml中的配置,改為在每個action中用annotation進行註解。這裡刪除上面在xml中的配置,將下面的代碼寫入到上面的JsonAction的上部:

Java代碼  

@ParentPackage(“base”)

@Namespace(“/watson”)

@Results({

@Result(name = “json”,type=”json”, params={“root”,”msg”})

})

root就相當xml配置中的參數配置。

四.附 :

action的返回類型為json時的可配置參數詳解:

Xml代碼  

result type=”json”

!– 這裡指定將被Struts2序列化的屬性,該屬性在action中必須有對應的getter方法 —

!– 默認將會序列所有有返回值的getter方法的值,而無論該方法是否有對應屬性 —

param name=”root”dataMap/param

!– 指定是否序列化空的屬性 —

param name=”excludeNullProperties”true/param

!– 這裡指定將序列化dataMap中的那些屬性 —

param name=”includeProperties”userList.*/param

!– 這裡指定將要從dataMap中排除那些屬性,這些排除的屬性將不被序列化,一般不與上邊的參數配置同時出現 —

param name=”excludeProperties”SUCCESS/param

/result

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/293149.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-25 18:39
下一篇 2024-12-25 18:39

相關推薦

  • Ojlat:一款快速開發Web應用程序的框架

    Ojlat是一款用於快速開發Web應用程序的框架。它的主要特點是高效、易用、可擴展且功能齊全。通過Ojlat,開發人員可以輕鬆地構建出高質量的Web應用程序。本文將從多個方面對Oj…

    編程 2025-04-29
  • Zlios——一個多功能的開發框架

    你是否在開發過程中常常遇到同樣的問題,需要不斷去尋找解決方案?你是否想要一個多功能、易於使用的開發框架來解決這些問題?那麼,Zlios就是你需要的框架。 一、簡介 Zlios是一個…

    編程 2025-04-29
  • 掌握magic-api item.import,為你的項目注入靈魂

    你是否曾經想要導入一個模塊,但卻不知道如何實現?又或者,你是否在使用magic-api時遇到了無法導入的問題?那麼,你來到了正確的地方。在本文中,我們將詳細闡述magic-api的…

    編程 2025-04-29
  • agavi開發框架

    Agavi是一個基於MVC模式的Web應用程序開發框架,以REST和面向資源的設計為核心思想。本文章將從Agavi的概念、優點、使用方法和實例等方面進行詳細介紹。 一、概念 Aga…

    編程 2025-04-29
  • Python Web開發第三方庫

    本文將介紹Python Web開發中的第三方庫,包括但不限於Flask、Django、Bottle等,並討論它們的優缺點和應用場景。 一、Flask Flask是一款輕量級的Web…

    編程 2025-04-29
  • 數據結構與演算法基礎青島大學PPT解析

    本文將從多個方面對數據結構與演算法基礎青島大學PPT進行詳細的闡述,包括數據類型、集合類型、排序演算法、字元串匹配和動態規劃等內容。通過對這些內容的解析,讀者可以更好地了解數據結構與算…

    編程 2025-04-29
  • Python unittest框架用法介紹

    Python unittest框架是Python自帶的一種測試框架,可以用來編寫並運行測試用例。在本文中,我們將從以下幾個方面詳細介紹Python unittest框架的使用方法和…

    編程 2025-04-29
  • com.alipay.sofa.bolt框架

    com.alipay.sofa.bolt框架是一款高性能、輕量級、可擴展的RPC框架。其廣泛被應用於阿里集團內部服務以及阿里雲上的服務。該框架通過NIO支持高並發,同時還內置了多種…

    編程 2025-04-29
  • Web程序和桌面程序的區別

    Web程序和桌面程序都是進行軟體開發的方式,但是它們之間存在很大的區別。本文將從多角度進行闡述。 一、運行方式 Web程序運行於互聯網上,用戶可以通過使用瀏覽器來訪問它。而桌面程序…

    編程 2025-04-29
  • 數據結構學生成績管理系統

    在現代教育中,學生成績的管理已經成為了一個不可或缺的部分。藉助數據結構,一個高效、可靠的學生成績管理系統可以被輕鬆實現。 一、數據結構的選擇 在構建學生成績管理系統時,選擇合適的數…

    編程 2025-04-29

發表回復

登錄後才能評論