2015-06-19 54 views
1

我有一個RestService,我正在返回一個JSON響應,如下所示。如何傳遞原始JSON作爲Restful服務的響應?

下面是我的代碼:

import javax.ws.rs.GET; 
import javax.ws.rs.Path; 
import javax.ws.rs.Produces; 

@GET 
@Path("/json/lime") 
@Produces(MediaType.APPLICATION_JSON) 
public DataResponse getData(@Context DataInfo info) { 

    // some code here 
    System.out.println(resp.getResponse()); 
    return new DataResponse(resp.getResponse()); 
} 

下面是實際的JSON響應我得到打我的RESTful服務後回:

{ 
    "response": "{\"ABC\":100,\"PQR\":\"40\"}\n", 
} 

而這正是它從System.out的打印出來如上所示:

{"ABC":100,"PQR":"40"} 

這是我的DataResponse類:

public class DataResponse { 

    private String response; 

    public DataResponse(String response) { 
     this.response = response; 
    } 

    public String getResponse() { 
     return this.response; 
    } 
} 

正如你所看到的,我的response字符串在上面的JSON中被越獄了。我不知道爲什麼?任何人都可以幫助我理解爲什麼會發生這種情況,以及如何解決它?

+0

什麼是'resp'我沒有看到它在任何地方定義? – brso05

+0

@ brso05這裏重要嗎? 'resp'是一個對象,我從中得到一個具有JSON響應的String:因此,'resp.getResponse()'返回一個JSON響應,根本沒有任何轉義。用更多細節更新了問題。 – john

+0

你需要給我們更多像'DataResponse'類和'resp.getResponse()'返回的東西。 – brso05

回答

0

您的回覆中包含雙引號。例如,您的字符串看起來像「{」ABC「:100,」PQR「:」40「} \ n」,它根本不是有效的字符串值。要包含字符串中具有特殊含義的任何字符,必須將其轉義。

1

問題是你試圖返回一個JSON字符串作爲響應。讓Web服務構建JSON你像這樣(不建立自己的JSON字符串):

public class DataResponse { 

    private int ABC; 
    private String PQR; 

    public DataResponse() 
    { 

    } 

    public DataResponse(int ABC, String PQR) { 
     this.ABC = 100; 
     this.PQR = "40"; 
    } 
    //getters and setters here 
} 

以上僅僅是一個例子,我不希望你硬編碼值。

{ 
    "ABC":100, 
    "PQR":"40" 
} 

該計劃正按預期它正在改變你的DataResponse類爲JSON但既然你有JSON存儲在字符串中,它是將其轉換:

所得的像上面應該是JSON正在逃脫Javascript中的字符。

{ 
    "response": "{\"ABC\":100,\"PQR\":\"40\"}\n", 
} 

您的JavaScript對象將是這樣的:

window.alert(data.response); 

應打印:

{"ABC":100,"PQR":"40"} //same as system.out.print 

我希望你明白我的意思,如果不是隻問...

****************************************** ***** UPDATE ******************************************** ************

@GET 
@Path("/json/lime") 
@Produces(MediaType.TEXT_PLAIN) 
public String getData(@Context DataInfo info) { 

    // some code here 
    System.out.println(resp.getResponse()); 
    return resp.getResponse(); 
} 

JavaScript端轉換StringObject例如:

var test = JSON.parse("{\"ABC\":100,\"PQR\":\"40\"}"); 
window.alert(test.ABC); 
window.alert(test.PQR); 

StringJSON參考here

+0

在我的情況下,我的pojo不是一般的。 JSON響應可以在任何POJO中進行,因此這就是DataResponse中字符串的原因。 – john

+0

@david然後,而不是返回一個'對象'作爲'JSON'返回一個'字符串'作爲純文本,然後在'javascript'端將'string'轉換爲一個對象... – brso05

+0

@david,因爲它已經在' JSON'格式,你不需要網絡服務來轉換它... – brso05

2

使用Response類:

import javax.ws.rs.GET; 
import javax.ws.rs.Path; 
import javax.ws.rs.Produces; 
import javax.ws.rs.core.Response; 

    @GET 
    @Path("/json/lime") 
    @Produces(MediaType.APPLICATION_JSON) 
    public ResponsegetData(@Context DataInfo info) { 
     ... 
     return Response.status(200).entity(resp.getResponse()).build(); 
    } 
相關問題