當前位置:
                    首頁 >
                            前端技术
>                            javascript
>内容正文                
                        
                    javascript
泽西岛/贾克斯RS:流式JSON
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                泽西岛/贾克斯RS:流式JSON
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.                        
                                大約一年前,我寫了一篇博客文章,展示了如何使用Jersey / Jax RS流式傳輸HTTP響應 ,最近我想做同樣的事情,但是這次使用JSON。
一種常見的模式是獲取我們的Java對象并獲??取該對象的JSON字符串表示形式,但這并不是最有效的內(nèi)存使用方式,因為我們現(xiàn)在有了Java對象和一個字符串表示形式。
如果我們需要在響應中返回大量數(shù)據(jù),則這尤其成問題。
通過編寫更多代碼,我們可以在部分準備就緒后立即將響應發(fā)送到客戶端,而不是構建整個結果并一次性發(fā)送所有結果:
@Path("/resource") public class MadeUpResource {private final ObjectMapper objectMapper;public MadeUpResource() {objectMapper = new ObjectMapper();}@GET@Produces(MediaType.APPLICATION_JSON)public Response loadHierarchy(@PathParam( "pkPerson" ) String pkPerson) {final Map<Integer, String> people = new HashMap<>();people.put(1, "Michael");people.put(2, "Mark");StreamingOutput stream = new StreamingOutput() {@Overridepublic void write(OutputStream os) throws IOException, WebApplicationException{JsonGenerator jg = objectMapper.getJsonFactory().createJsonGenerator( os, JsonEncoding.UTF8 );jg.writeStartArray();for ( Map.Entry<Integer, String> person : people.entrySet() ){jg.writeStartObject();jg.writeFieldName( "id" );jg.writeString( person.getKey().toString() );jg.writeFieldName( "name" );jg.writeString( person.getValue() );jg.writeEndObject();}jg.writeEndArray();jg.flush();jg.close();}};return Response.ok().entity( stream ).type( MediaType.APPLICATION_JSON ).build() ;} }如果運行此輸出,我們將看到:
[{"id":"1","name":"Michael"},{"id":"2","name":"Mark"}]這是一個簡單的示例,但希望可以很容易地看到如果我們想流式傳輸更復雜的數(shù)據(jù)時可以如何翻譯它。
翻譯自: https://www.javacodegeeks.com/2014/04/jerseyjax-rs-streaming-json.html
總結
以上是生活随笔為你收集整理的泽西岛/贾克斯RS:流式JSON的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: .net3.5安装失败错误代码0x800
- 下一篇: 电脑有多少配件(电脑配件一共有哪些)
