我从简单的Spring Controller接收JSON时遇到了一些麻烦,虽然我检查了许多其他教程甚至是官方的春季博客,但没有找到任何区别,所以请帮助我。
所以我项目中的依赖项是:
我的控制器非常简单,只需生成随机UUID并将其返回。它看起来如下:
@Controller
public class SimpleController {
@RequestMapping(value="/new", method=RequestMethod.GET)
public @ResponseBody SimpleResponse new() throws JsonGenerationException, JsonMappingException, IOException {
SimpleResponse sr = new SimpleResponse();
sr.setId(UUID.randomUUID().toString());
return sr;
}
}
该模型只是一个简单的POJO
public class SimpleResponse {
private String id;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
}
配置就像这样
<?xml version="1.0" encoding="UTF-8"?>
<web-app 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"
version="2.5" xmlns="http://java.sun.com/xml/ns/javaee">
<display-name>SimpleTest</display-name>
<servlet>
<servlet-name>app</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>app</servlet-name>
<url-pattern>/app/*</url-pattern>
</servlet-mapping>
</web-app>
和
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<mvc:annotation-driven />
<context:component-scan base-package="de.tum.ibis.wsc" />
</beans>
那就是服务器端。在客户端,我有一个只有一行jQuery代码的html页面
<!DOCTYPE html>
<html>
<head>
<title>Test</title>
<script src="http://code.jquery.com/jquery.js"></script>
<script>
$(document).ready(function() {
$.getJSON("http://localhost:8080/Frontend/app/new", function(data) { console.log("it works"); });
});
</script>
</head>
<body>
</body>
</html>
现在根据我所读到的一切,这应该有效但不适合我。如果我在浏览器中直接调用localhost:8080 / Frontend / app / new,我会得到类似这样的内容:{“id”:“b46b8d67-5614-44ed-90ef-d2da14d260f6”}并且Firebug告诉我服务器的响应头是
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Transfer-Encoding: chunked
Server: Jetty(7.6.5.v20120716)
所以内容类型应该没问题。好吧,如果我现在运行jquery ajax调用,我在jquery.js中得到错误“JSON.parse:意外的数据结束”,我没有cloue为什么。我希望有人可以帮助我。谢谢!
------更新------
Firebug:jQuery错误
萤火虫:我得到的全部
Firebug:如果直接访问网址,我就会得到这些
答案 0 :(得分:2)
尝试在Spring XML配置中配置ContentNegotiationManagerFactoryBean
,请参阅Spring docs
将favorPathExtension
设置为false
并更新方法的@RequestMapping
,如此
@RequestMapping(value="/new", method=RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
答案 1 :(得分:0)
在您的AJAX请求中,您正在使用
http://localhost:8080/Frontend/app/new
你的servlet声明了URL“/ new”,你应该使用“/ app / new”。
@RequestMapping(value =“/ app / new”,method = RequestMethod.GET)