⑴ java中處理JSON的開源工具都有些什麼那個比較好用
Java世界中存在許多工具,從Eclipse,NetBeans和IntelliJ IDEA等著名的IDE開始到Java開發人員應該知道的JVM分析和監視工具,如JConsole,VisualVM,Eclipse Memory Analyzer等。
如果你是一位經驗豐富的Java開發人員,你可能對這些工具很熟悉,但如果不是,現在就是是開始學習這些工具的好時機。就來介紹下程序員都知道的10款Java開源工具,你知道幾個呢?
1. JIRA
Atlassian的JIRA是當前敏捷開發領域最重要的工具之一。它用於錯誤跟蹤,問題跟蹤和項目管理。如果你遵循敏捷開發方法,例如Sprint和Scrum,那麼你必須了解JIRA。它允許您創建Spring循環並跟蹤軟體開發的進度。
JIRA 是目前比較流行的基於Java架構的管理系統,由於Atlassian公 司對很多開源項目實行免費提供缺陷跟蹤服務,因此在開源領域,其認知度比其他的產品要高得多,而且易用性也好一些。
2. Git
Git是Java程序員的另一個必備工具,它是一個免費的開源分布式版本控制系統,旨在快速高效地處理從很小到非常大的項目版本管理。Git易於學習,佔用空間小,具有超強的性能。最初 Git 的開發是為了輔助 Linux 內核開發的過程,但是發現已經在很多其他自由軟體項目中也使用了 Git。
3. Jenkins
Jenkins是一個用Java編寫的開源自動化伺服器。它有助於自動化軟體開發,例如編譯項目,運行單元測試,集成測試,生成文檔以及在本地和遠程存儲庫上載工件。
4. Selenium
Selenium是Web應用程序最好的軟體測試框架之一。它提供了一種用於創作測試的回放工具,而無需學習測試腳本語言。Java開發人員可以使用Selenium來測試他們的HTML和JSP文件。
5. Groovy
Groovy 是一種基於 JVM 的敏捷開發語言,它結合了 Python、Ruby 和 Smalltalk 的許多強大的特性。你可以使用它編寫構建腳本,測試腳本,甚至可以使用像Gradle和Spock這樣的流行框架。
6、Spock
Spock 是適合 Java 和 Groovy 應用程序的一個測試框架。由於其JUnit運行程序,Spock與大多數IDE,構建工具和持續集成伺服器兼容。如果你想提高你的單元測試技能,那麼多花點時間在學習Spock上總是沒錯的。
7. Maven
如果你是一位經驗豐富的Java開發人員,那麼你一定非常了解Maven了,Apache Maven是一個構建和項目管理工具,基於項目對象模型(POM)的概念,Maven可用於管理項目的生成、報告和文檔記錄。
Maven的另一個有用特性是依賴關系管理,由於我們在Java項目中使用了大量第三方庫,因此手動管理每個JAR及其依賴項可能非常麻煩,Maven通過自動為你下載正確的JAR來幫助你解決問題。
8. Gradle
Gradle 是一個基於 Apache Ant 和 Apache Maven 概念的項目自動化構建工具。為什麼選擇Gradle在Ant或Maven?因為它結合了其他構建工具的最佳特性,例如它具有Ant的靈活性和控制,Ivy的依賴管理,Maven的配置和插件的約定,以及可以在Ant上使用Groovy DSL。這使它成為Java項目的最佳構建工具。
9. Docker
Docker 是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中,然後發布到任何流行的 Linux 機器上,也可以實現虛擬化。
容器是完全使用沙箱機制,相互之間不會有任何介面(類似 iPhone 的 app)。幾乎沒有性能開銷,可以很容易地在機器和數據中心中運行。最重要的是,他們不依賴於任何語言、框架或包裝系統。
10. Linux
初學Linux最好從Linux命令行基礎知識開始,Linux是一種自由和開放源碼的類Unix操作系統,在你的職業生涯中起到重要的作用,每一個Java開發者都應該學Linux。如果以上工具還有你沒學會的,那就不要再錯過了趕緊學起來。
⑵ 可以對response返回的json進行壓縮嗎
可以,每個語言有對應的處理辦法,主要是gzip壓縮方式,如果您是通過對方的Nginx之類的,會自帶壓縮,只要開啟即可,代碼返回壓縮要自己處理,在IO流輸出的時候開啟gzip壓縮。
但是壓縮有一個問題,就是對方需要解壓縮,要不然容易亂碼。
在線對JSON壓縮轉義的工具給您推薦一個。
JSON壓縮轉義:http://www.sojson.com/yasuo.html
⑶ json字元串可以壓縮么
這個和你的客戶端處理相關聯,如果服務端對標准json串進行了修改和壓縮,那你客戶端的處理需要解壓和對應的處理,這樣的話標準的庫可能直接使用會有問題,需要進行客戶端解析庫的定製
如果客戶端服務端都是你定製的序列化和反序列化,那你可以任意控制這個格式,修改json串,如果要和標准兼容最好不要這樣定製,如果你是想減少網路流量,建議使用web服務的http壓縮
⑷ java 如何把一個ZIP的壓縮包轉換String然後用json報文上傳,接收到json報文後再還原這個zip到指定目錄
轉BASE64吧,這樣的數據量略一一些
~~~~~~~~~
⑸ java怎麼把object轉成json
1、json-lib是一個java類庫,提供將Java對象,包括beans, maps, collections, java arrays and XML等轉換成JSON,或者反向轉換的功能。
⑹ JSON的zip文件怎麼解壓縮
安卓手機可以對zip.、.rar後綴的壓縮包文件進行解壓,具體步驟如下: 在網站上查找「安卓解壓軟體」,下載並安裝解壓apk程序。 安裝後,在手機「文件管理」中找到需解壓的文件,點擊後進行解壓或長按需解壓的文件,選擇解壓軟體進行解壓。 壓縮軟體...
⑺ java中如何將對象轉成json格式字元串
用Gson轉換就行了,需要下載jar包
例子:
Personperson=newPerson();
Gsongson=newGson();
Stringjson=gson.toJson(person);
⑻ java怎麼處理json格式數據
json數據:sTotalString = {"message":"success","result":[{"surveyid":"1","surveyname":"B"}{surveyid":"2","surveyname":"C"}]};
json數據:sTotalString = {"message":"success","result":[{"surveyid":"1","surveyname":"B"}{surveyid":"2","surveyname":"C"}]};
⑼ 如何壓縮json數據結構的大小
1,開啟gzip,壓縮率很高,即便是很長的文本,在網路中傳輸量也很小
2,不建議分次請求,除非是業務需要。連接次數過多,加大了並發的壓力。
3,提醒用戶點擊的做法可以通過按鈕反饋或loading條來做
4,如果有可能,考慮提前預讀
你可以這樣,在一個隱藏的 iframe 裡面請求伺服器,返回值是這樣的:
<script>
parent.notifyDataArrive(YOURS_JSON_DATA);
</script>
⑽ 如何在java REST API中用GZip和Jersey壓縮相應
有許多情景當你的REST api提供的相應是非常長的,並且我們都知道傳遞速度和貸款在移動設備/網路上是多重要。當開發支持REST apis的移動app的時候,我認為首要的性能最優化的點就是需要解決。猜猜是什麼?因為響應式文本,因此我們能壓縮這些文本。而且隨著當前的只能手機和平板的能力,在客戶端解壓文本應該不是個大問題...因此在這篇文章中,如果你使用java的Jersey構建它,我將介紹你怎麼能有選擇性的壓縮REST API響應,這個Jersey事JAX-RS的映射實現(還有更多)...
1.Jersey過濾器和攔截器
啊,感謝Jersey的強大的過濾器和攔截器特性,這個實現是相當容易的。然後過濾器是主要打算來維護像HTTP headers,URIs和/或HTTP methods的request和response的參數,攔截器是維護實體,通過維護實體的輸入/輸出流。
但是對於壓縮將使用一個GZip WriterInterceptor,一個寫攔截器被用於這種情況,在那個類里,實體被寫到"wire",當在這種情況中時,它在伺服器這邊,這就意味著輸出一個響應實體。
1.1GZip Writer Interceptor
那讓我們來看看我們的GZip Writer Interceptor吧:
GZip Writer Interceptor
package org.codingpedia.demo.rest.interceptors;
import java.io.IOException;
import java.io.OutputStream;
import java.util.zip.GZIPOutputStream;
import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.MultivaluedMap;
import javax.ws.rs.ext.WriterInterceptor;
import javax.ws.rs.ext.WriterInterceptorContext;
@Provider
@Compress
public class GZIPWriterInterceptor implements WriterInterceptor {
@Override
public void aroundWriteTo(WriterInterceptorContext context)
throws IOException, WebApplicationException {
MultivaluedMap<String,Object> headers = context.getHeaders();
headers.add("Content-Encoding", "gzip");
final OutputStream outputStream = context.getOutputStream();
context.setOutputStream(new GZIPOutputStream(outputStream));
context.proceed();
}
}
注意:
它實現了WriterInterceptor,這是一個寫攔截器的消息體的介面,這個介麵包裝調用javax.ws.rs.ext.MessageBodyWriter.writeTo
供應商實現WriterInterceptor協議必須要麼以編程方式注冊進一個JAX-RS運行環境,要麼必須用@Provider註解來註解在一個提供商掃描語句期間自動的被JAX-RS運行環境發現。
@Compress是綁定註解的名稱,在接下來的段落中我們將更詳細的討論它
「攔截器從WriterInterceptorContext中獲得一個輸出流並且設置一個新的用原始的GZIP包裝器包裝的輸出流。在所有的攔截器被執行以後,輸出流最終設置WriterInterceptorContext將用於序列化實體。在上面的例子中,實體位元組將被寫到GZIPOutputStream中,這個類將壓縮流數據,然後把他們寫到原始輸出流。原始流總是把數據寫到wire中。當攔截器被用在伺服器上時,原始輸出流會把數據寫到底層伺服器容器的流中,然後發送響應給客戶端。」
「重載方法aroundWriteTo()獲取WriterInterceptorContextz作為參數。這個上下文包括請求頭參數getters和setters,請求屬性,實體,實體流和其它屬性;當你壓縮你的響應時,你應當設置'Content-Encoding'頭位gzip」
1.2 壓縮註解
過濾器和攔截器能被綁定名字。名稱綁定是一種概念,這種概念就是允許告訴一個JAX-RS的運行時,一個只為特定資源方法的特定的過濾器或者攔截器將被執行。當一個過濾器或者攔截器只對一些特定的資源方法限制,那我們就認為它是名稱綁定。過濾器和攔截器沒有這樣的限制就被稱作global。在我們的例子中我們已經構建了@Compress註解:
Compress annotation
package org.codingpedia.demo.rest.interceptors;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import javax.ws.rs.NameBinding;
//@Compress annotation is the name binding annotation
@NameBinding
@Retention(RetentionPolicy.RUNTIME)
public @interface Compress {}
而且用它來標記在資源上的方法,這個方法應該是被壓縮的(eg:當GET-ing的時候,所有的博客用PodcastsResource)
@Compress annotation在資源方法上的使用
@Component
@Path("/podcasts")
public class PodcastsResource {
@Autowired
private PodcastService podcastService;
...........................
/*
* *********************************** READ ***********************************
*/
/**
* Returns all resources (podcasts) from the database
*
* @return
* @throws IOException
* @throws JsonMappingException
* @throws JsonGenerationException
* @throws AppException
*/
@GET
@Compress
@Proces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
public List<Podcast> getPodcasts(
@QueryParam("orderByInsertionDate") String orderByInsertionDate,
@QueryParam("numberDaysToLookBack") Integer numberDaysToLookBack)
throws IOException,AppException {
List<Podcast> podcasts = podcastService.getPodcasts(
orderByInsertionDate, numberDaysToLookBack);
return podcasts;
}
...........................
}
2.測試
2.1SOAPui
好了,如果你正在用SOAPui測試,你能使用下面的請求違反PodcastsResource
Reqest:
請求例子:
GET http://localhost:8888/demo-rest-jersey-spring/podcasts/?orderByInsertionDate=DESC HTTP/1.1
Accept-Encoding: gzip,deflate
Accept: application/json, application/xml
Host: localhost:8888
Connection: Keep-Alive
User-Agent: Apache-HttpClient/4.1.1 (java 1.5)
Response:
被壓縮的json響應,通過SOAPui自動的解壓縮
HTTP/1.1 200 OK
Content-Type: application/json
Content-Encoding: gzip
Content-Length: 409
Server: Jetty(9.0.7.v20131107)
[
{
"id": 2,
"title": "Quarks & Co - zum Mitnehmen",
"linkOnPodcastpedia": "http://www.podcastpedia.org/quarks",
"feed": "http://podcast.wdr.de/quarks.xml",
"description": "Quarks & Co: Das Wissenschaftsmagazin",
"insertionDate": "2014-10-29T10:46:13.00+0100"
},
{
"id": 1,
"title": "- The Naked Scientists Podcast - Stripping Down Science",
"linkOnPodcastpedia": "http://www.podcastpedia.org/podcasts/792/-The-Naked-Scientists-Podcast-Stripping-Down-Science",
"feed": "feed_placeholder",
"description": "The Naked Scientists flagship science show brings you a lighthearted look at the latest scientific breakthroughs, interviews with the world top scientists, answers to your science questions and science experiments to try at home.",
"insertionDate": "2014-10-29T10:46:02.00+0100"
}
]
SOAPui接受Content-type:gzip頭,我們在GZIPWriterIntercepter中添加了並且自動的解壓了響應並且用人眼可讀的方式展示出來。
好了,就這些了。你已經了解了Jersey如何讓它直接壓縮REST api響應了。