使用Jersey在浏览器上显示JSON

时间:2013-03-13 10:58:28

标签: java json browser jersey

我正在使用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; 
}

我感谢你的帮助。

4 个答案:

答案 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>