Hello StackOverFlow(s)
我现在已经运行了这个问题超过2个小时了 这很简单
我正在尝试使用$ .ajax POST调用将JSON对象发送到Spring Controller
我正在使用AngularJS,但这一点是okey
这是服务器和客户端的代码以及弹簧配置
提前感谢
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)
}
})
}
Spring Controller:
@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 :(得分:5)
这是答案
这只是正确编写JSON字符串
的问题而不是
var jsonString = {id:"1",title:"ajax",description:"ajax"};
我这样写了
var jsonString = '{"id":"1","title":"ajax","description":"ajax"}';
还有什么奇怪的是,JSON.stringify(MyObject)似乎不适用于我的情况!!
答案 1 :(得分:1)
如果您获得400状态代码,则只能出于以下原因(来自W3):
10.4.1 400错误请求
由于语法格式错误,服务器无法理解该请求。客户不应该在没有修改的情况下重复请求。
使用Spring,这或者意味着ajax请求是错误的(请参阅我对数据JSON字符串的评论),或者它无法解析请求体中的JSON字符串并将其转换为命令对象Todo
。所以Spring有一个它可以调用的方法,你的push()
方法,但它没有你想要传递给它的参数,所以它会抛出一个400 Bad Request。
415 Unsupported Media Type
意味着Spring无法找到消耗您发送内容的方法。您的push()
Spring方法consumes="application/json"
,但您的请求未使用该内容类型。
答案 2 :(得分:0)
你可以发布你的web.xml吗?由于您没有为请求定义后缀并在最后放置斜杠,因此您正在请求该目录的index.jsp。