2013-01-31 45 views
0

你好計算器(S)

我這個問題,因爲運行現在2個多小時 很簡單

我「M試圖通過使用$就POST調用

我使用AngularJS JSON對象發送到春天控制器,但是這一點是好

這裏的服務器和客戶端和T的代碼他spring配置

感謝的提前

JQuery的:

$scope.push = function() { 
    $.ajax({ 
     type: "PUT", 
     url:"rest/todo/greeting/", 
     data : {id:"1",title:"ajax",description:"ajax"}, 
     dataType: "json", 
     contentType : "application/json", 
     success : function(data) { 
      $log.info(data) 
     } 
    }) 
} 

春控制器:

@Controller 
@RequestMapping("/todo") 
public class TodoController { 
@RequestMapping(value = "/greeting", method = RequestMethod.PUT,consumes="application/json",produces="text/html") 
public @ResponseBody String push(@RequestBody Todo todo) { 
    System.out.println(todo.getTitle()); 
    return "test"; 
} 

}

Spring配置文件:

<mvc:annotation-driven /> 
<context:component-scan base-package="org.lab.todo.controller" /> 
<bean id="defaultViews" class="org.springframework.web.servlet.view.json.MappingJackson2JsonView" /> 

的web.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> 

<listener> 
    <listener-class> 
     org.springframework.web.context.ContextLoaderListener 
    </listener-class> 
</listener> 

<!-- 
    Spring WEBMVC/REST Controllers 
--> 
<servlet> 
    <servlet-name>todo-dispatcher</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
</servlet> 
<servlet-mapping> 
    <servlet-name>todo-dispatcher</servlet-name> 
    <url-pattern>/rest/*</url-pattern> 
</servlet-mapping> 

AJAX調用更新:

$scope.push = function() { 
    var jsonString = {id:"1",title:"ajax",description:"ajax"}; 
    var Todo = function(){} 
    Todo.id = "id"; 
    Todo.title = "ajax"; 
    Todo.description = "ajax"; 
    $.post("rest/todo/greeting",JSON.stringify(Todo),function(response){console.log(response)},'json'); 
} 

小提琴原始請求頭:

POST http://localhost:8080/todo-rest/rest/todo/greeting HTTP/1.1 
Host: localhost:8080 
Connection: keep-alive 
Content-Length: 0 
Accept: application/json, text/javascript, */*; q=0.01 
Origin: http://localhost:8080 
X-Requested-With: XMLHttpRequest 
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.17 (KHTML, like Gecko)  Chrome/24.0.1312.56 Safari/537.17 
Referer: http://localhost:8080/todo-rest/ 
Accept-Encoding: gzip,deflate,sdch 
Accept-Language: en-US,en;q=0.8,fr;q=0.6 
Accept-Charset: UTF-8,*;q=0.5 

小提琴響應頭

HTTP/1.1 415 Unsupported Media Type 
Server: Apache-Coyote/1.1 
Content-Type: text/html;charset=utf-8 
Content-Length: 1048 
Date: Thu, 31 Jan 2013 17:11:40 GMT 
+0

我相信你的'數據'值格式不正確。嘗試在ajax調用之外創建json字符串並將它傳入。 'data =「{id:\」1 \「,title:\」ajax \「,description:\」ajax \「}」' –

+0

它返回相同的迴應。請檢查郵政中的項目URL。謝謝 –

回答

5

這裏的答案

它只是適當地寫JSON字符串

,而不是

var jsonString = {id:"1",title:"ajax",description:"ajax"}; 

我寫這樣的

var jsonString = '{"id":"1","title":"ajax","description":"ajax"}'; 

什麼仍然是不可思議的事是JSON.stringify(MyObject)似乎不工作在我的情況!

0

你可以發佈你的web.xml?由於您沒有爲您的請求定義後綴並最終放置斜線,因此您正在對該目錄的index.jsp發出請求。

+0

我剛剛更新了帖子 –

+1

2件事情:你可以嘗試通過firebug看到你的ajax請求被執行了哪個url?其次:你可以嘗試刪除你的ajax請求中的結束斜線嗎? –

+0

正確的網址被調用,我試過後,我刪除了最後一個斜槓和響應是相同的。 我通過添加一個包含項目的公共SVN倉庫更新了Post,使用mvn tomcat:run來啓動。 –

1

如果你得到一個400個狀態碼,它只能是因爲以下原因(來自W3):

10.4.1 400錯誤的請求

請求不能被理解服務器由於格式錯誤。客戶端不應該在沒有修改的情況下重複請求。

藉助於Spring,這要麼意味着Ajax請求是錯誤的(參見我的有關數據的JSON字符串評論),也不能解析和請求體翻譯JSON字符串命令對象Todo。所以Spring有一個方法可以調用,即你的push()方法,但它沒有你想要傳遞給它的參數,所以它會拋出一個400錯誤的請求。

415 Unsupported Media Type意味着Spring無法找到消耗您發送內容的方法。您的push()彈簧方法consumes="application/json"但您的請求未使用該內容類型。

+0

我改變了一點點我的阿賈克斯調用 - 看到更新 - –

+0

現在我收到415錯誤代碼 - 請參閱更新 - –

+0

你不能看到與Fiddle請求的正文? 另外,您將請求更改爲POST,您是否更改了控制器方法?您還需要在請求中爲「Content-type:application/json」添加一個標頭。 –