1

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

4 回答 4

4

好吧,您的代码声明它生成 XML 和 JSON。根据您的浏览器设置,它可能会请求 XML 而不是 JSON。

首先,检查您的代码是否真的可以生成 JSON。MediaType.APPLICATION_XML从您的 @Produces 注释中删除并再次测试。

如果可行,您将需要告诉您的浏览器请求 JSON。添加Accept: application/json到您的请求标头。

如何完成取决于您的客户端应用程序。在 JavaScript 中,这是通过添加类似的东西来完成的

httpRequest.setRequestHeader('Accept', 'application/json'); 

取决于您使用的框架。您也可以curl在命令行上进行测试

curl -H "Accept: application/json" http://yourhost/context/todos

如果您在浏览器中键入 URL,它很可能会发送以下接受标头

Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

因为浏览器想要向用户显示一些东西(样式化的 html)。这就是 MediaType.APPLICATION_XML 优先于您的 MediaType.APPLICATION_JSON 的原因。

于 2013-03-13T11:06:25.853 回答
0

1) 安装浏览器扩展,例如 Postman (Chrome) 或 Poster (FireFox) 2) 在此扩展中添加标头 Accept:application/json

于 2014-07-08T14:40:23.260 回答
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>
于 2013-03-13T11:12:42.620 回答
0

正如我所看到的,您的方法是用 GET 映射的。所以你必须改变@Produces({ MediaType.APPLICATION_JSON })。这将仅以 JSON 形式生成数据,并且要在浏览器中查看这些数据,您可以为 Chrome 浏览器插入 Advance Rest API(应用程序)支持。那肯定会奏效。一切顺利

 @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>
于 2016-05-12T07:22:08.300 回答