2016-01-28 40 views
2

我必須發送JSON到其餘終端服務,它是使用春季啓動構建的。我不明白我做錯了什麼。這裏是代碼無法發送JSON到休息終點在春季啓動應用程序

@RestController public class EmailWithTemplate 
{ 
    @RequestMapping(value="/create-template",method=RequestMethod.GET) 
    void CreateTemplate(@RequestBody EmailTemplate emailtemplate) 
    { 
     System.out.println(emailtemplate.getName()); 
    } 
} 

public class EmailTemplate 
{ 
    private String name; 
    private String body; 
    //private String[] values; 

    public void setName(String name) 
    { 
     this.name=name; 
    } 
    public String getName() 
    { 
     return name; 
    } 

    public void setBody(String body) 
    { 
     this.body=body; 
    } 
    public String getBody() 
    { 
     return body; 
    } 
} 

加我還在pom.xml文件中添加了傑克遜依賴項。

<dependency> 
     <groupId>org.codehaus.jackson</groupId> 
     <artifactId>jackson-core-asl</artifactId> 
     <version>1.9.13</version> 
    </dependency> 
    <dependency> 
     <groupId>org.codehaus.jackson</groupId> 
     <artifactId>jackson-mapper-asl</artifactId> 
     <version>1.9.13</version> 
    </dependency> 

啓動Tomcat服務器後,當我打:

本地主機:8080 /創建模板/ { 「名」: 「測試」, 「體」: 「人體試驗」}

這顯示在瀏覽器中:

白色標籤錯誤頁面

此應用程序沒有明確映射/錯誤,因此您將此視爲 作爲後備。

Fri Jan 29 01:58:00 IST 2016有一個意外的錯誤(type = Not Found,status = 404)。沒有可用的消息

+0

不應該你的REST調用是POST方法? – yogidilip

+0

我也嘗試過POST,但結果是一樣的 –

+0

Rohan,請您發佈實際調用您的服務的客戶端代碼嗎?另外,它確實有助於查看您的請求/響應對的日誌。 – entpnerd

回答

1

基本上,你的客戶端代碼追加URL localhost:8080/create-template/與JSON {"name":"Test", "body":"Test body"}。所以,你所調用的URL是localhost:8080/create-template/{"name":"Test", "body":"Test body"},服務器找不到,因爲服務器只知道localhost:8080/create-template/資源。這就是爲什麼你要獲得404。JSON需要成爲請求主體的一部分,而不是請求URL。

此外,您的服務器正在等待HTTP GET請求。 GET請求不能包含主體。請參閱:HTTP GET with request body

您將需要使用JSON作爲正文執行HTTP POST方法。

例如,您應該發送類似如下要求:

POST http://localhost:8080/create-template/ HTTP/1.0 
Content-Type: application/json 

{ 
    "name":"Test", 
    "body":"Test body" 
} 
+0

所以我確實需要一個調用此服務的客戶端方法,我不能直接從瀏覽器調用該服務? –

+0

你也可以使用。我使用DHC for Chrome來測試我的JSON REST請求。嘗試將上述請求放在那裏。 – entpnerd

+0

是的它是在DHC上工作,但爲什麼不在瀏覽器的網址?答案是正如你所說服務器無法找到,因爲服務器只知道localhost:8080/create-template/ –

1

您必須將JSON作爲POST正文傳遞,而不是作爲URI路徑傳遞。

POST /create-template HTTP/1.0 
Content-type: application/json 

{"name": "Test", ...} 

jQuery的,例如你要撥打:

$.ajax({ 
    type: "POST", 
    url: "http://localhost:8080/create-template", 
    data: {name: "Test", ...}, 
}); 
+0

對不起,我沒有得到你。你能再解釋一下嗎? –

+0

將您的方法轉換爲POST。根據您使用何種客戶端來訪問該方法,您應該可以選擇發佈消息正文並設置內容類型。請使用這些選項。對於郵遞員,請按照這個網址。 https://www.getpostman.com/docs/requests – yogidilip

相關問題