我正在使用Jersey来实现REST服务。我想在浏览器上显示JSON,但我得到XML。
@Path("/todos")
public class TodosResource {
// Allows to insert contextual objects into the class,
// e.g. ServletContext, Request, Response, UriInfo
@Context
UriInfo uriInfo;
@Context
Request request;
// Return the list of todos to the user in the browser
@GET
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
public List<Todo> getTodosBrowser() {
List<Todo> todos = new ArrayList<Todo>();
todos.addAll(TodoDao.instance.getModel().values());
return todos;
}
我感谢你的帮助。
答案 0 :(得分:4)
好吧,您的代码声明它生成XML和JSON。根据您的浏览器设置,它可能会请求XML而不是JSON。
首先,检查您的代码实际上是否可以生成JSON。从@Produces注释中删除MediaType.APPLICATION_XML
并再次测试。
如果可行,您需要告诉浏览器请求JSON。将Accept: application/json
添加到您的请求标头中。
如何完成此操作取决于您的客户端应用程序。在JavaScript中,这可以通过添加类似
的内容来完成httpRequest.setRequestHeader('Accept', 'application/json');
取决于您使用的框架。您也可以在命令行上使用curl
进行测试
curl -H "Accept: application/json" http://yourhost/context/todos
如果您在浏览器中输入网址,则很可能会发送以下接受标头
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
因为浏览器想要向用户显示内容(样式为html)。这就是MediaType.APPLICATION_XML优先于您的MediaType.APPLICATION_JSON的原因。
答案 1 :(得分:0)
添加jersey-json.jar
将POJOMappingFeature作为initparam添加到web.xml,然后它会自动将java列表转换为json格式。
<init-param>
<param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
<param-value>true</param-value>
</init-param>
答案 2 :(得分:0)
1)安装浏览器扩展程序,例如邮差(Chrome)或海报(FireFox) 2)在此扩展名中添加标题Accept:application / json
答案 3 :(得分:0)
我可以看到你的方法是用GET映射的。所以你必须改变@Produces({MediaType.APPLICATION_JSON})。这将仅以JSON格式生成数据,并且在浏览器中可以看到此内容,您可以为Chrome浏览器插入Advance Rest API(app)支持。这肯定会奏效。一切顺利
@GET
@Produces({MediaType.APPLICATION_JSON})
public List<Todo> getTodosBrowser() {
List<Todo> todos = new ArrayList<Todo>();
todos.addAll(TodoDao.instance.getModel().values());
return todos;
}
Web.xml-
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>homepage_todaysdeal_products</display-name>
<welcome-file-list>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>RESTService</servlet-name>
<servlet- class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>"Mention Your Package Name here for GET/POST"</param-value>
</init-param>
<init-param>
<param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>RESTService</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
</web-app>