当前位置: 首页 > 知识库问答 >
问题:

JAX-RS泽西JSON GET HTTP状态500内部服务器错误

阎宝
2023-03-14

我正在学习JAX-RS,在发出生成JSON的GET请求时,出现HTTP Status 500内部服务器错误。XML工作正常。

我搜索了其他问题,但找不到解决方案。这可能是因为我目前缺乏知识。然而,据我所知,有人建议我的项目在构建路径中缺少一个JAR。

我没有使用Maven。我刚刚在Eclipse中创建了一个动态Web应用程序,并将JAX-RS/jerjar添加到我的WEB-INF/lib目录中,并将它们添加到我的构建路径中。

我正在使用Postman测试web服务。我在发出请求时将Accept添加到标题中:

接受:应用程序/xml-工作正常。接受:应用程序/json-内部服务器错误

这是我的(非常简单的代码)代码:

@XmlRootElement
public class Thing {

    private String name;

    public Thing(){}

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

}

该服务被设置为同时生成XML和JSON。

@Path("/get")
public class Service {

    @GET
    @Path("/both")
    @Produces({MediaType.APPLICATION_XML,MediaType.APPLICATION_JSON})
    public Thing getThingResponses(){

        Thing t = new Thing();
        t.setName("I'm a thing!");
        return t;

    }


}

如有任何帮助/指点,将不胜感激。谢谢

共有3个答案

袁河
2023-03-14

为了解决这个问题,我按照Paolof76的建议构建了一个Maven web应用程序。

然而,我使用了Jersey 2,因此我无法直接遵循示例。

让JSON MediaType工作需要以下依赖项:

    <!-- https://mvnrepository.com/artifact/org.json/json -->
    <dependency>
        <groupId>org.json</groupId>
        <artifactId>json</artifactId>
        <version>20160810</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.glassfish.jersey.media/jersey-media-json-jackson -->
    <dependency>
        <groupId>org.glassfish.jersey.media</groupId>
        <artifactId>jersey-media-json-jackson</artifactId>
        <version>2.0-m07</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.jaxrs/jackson-jaxrs-json-provider -->
    <dependency>
        <groupId>com.fasterxml.jackson.jaxrs</groupId>
        <artifactId>jackson-jaxrs-json-provider</artifactId>
        <version>2.9.0.pr3</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.glassfish.jersey.media/jersey-media-moxy -->
    <dependency>
        <groupId>org.glassfish.jersey.media</groupId>
        <artifactId>jersey-media-moxy</artifactId>
        <version>2.26-b03</version>
    </dependency>

有一些尝试和错误,但我最终做到了。

金和雅
2023-03-14

你能检查一下库是否被复制到服务器上吗?我不知道你在用哪台服务器

另一方面,你能显示错误的痕迹吗?

那安宁
2023-03-14

您可能忘记添加从java转换为json所需的所有依赖项。假设您正在使用maven,下面是您需要的(这些版本可能不是最后一个,请查看):

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>org.webapp</groupId>
  <artifactId>restservice</artifactId>
  <packaging>war</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>restservice Maven Webapp</name>
  <url>http://maven.apache.org</url>


  <dependencies>

    <dependency>
      <groupId>asm</groupId>
      <artifactId>asm</artifactId>
      <version>3.3.1</version>
    </dependency>
    <dependency>
      <groupId>com.sun.jersey</groupId>
      <artifactId>jersey-bundle</artifactId>
      <version>1.19.3</version>
    </dependency>
    <dependency>
      <groupId>org.json</groupId>
      <artifactId>json</artifactId>
      <version>20140107</version>
    </dependency>
    <dependency>
      <groupId>com.sun.jersey</groupId>
      <artifactId>jersey-server</artifactId>
      <version>1.19.3</version>
    </dependency>
    <dependency>
      <groupId>com.sun.jersey</groupId>
      <artifactId>jersey-core</artifactId>
      <version>1.19.3</version>
    </dependency>

  </dependencies>
  <build>
    <finalName>restservice</finalName>
  </build>
</project>

然后你有了网络。应加载定义rest的类的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" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
    <display-name>com.vogella.jersey.first</display-name>
    <servlet>
        <servlet-name>jersey-servlet</servlet-name>
        <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
        <init-param>
            <param-name>jersey.config.server.provider.packages</param-name>
            <param-value>org.restservice</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>jersey-servlet</servlet-name>
        <url-pattern>/rest/*</url-pattern>
    </servlet-mapping>
</web-app>

最后是一系列像你这样的方法

package org.restservice;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

/**
 * Created by paolo on 06/05/17.
 */
@Path("/hello")
public class Hello {

    // This method is called if TEXT_PLAIN is request
    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public String sayPlainTextHello() {
        return "Hello Jersey";
    }

    // This method is called if XML or JSON is request
    @GET
    @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
    public Thing sayXMLorJSONHello() {
        Thing t = new Thing();
        t.setName("I'm a thing!");
        return t;
    }

    // This method is called if HTML is request
    @GET
    @Produces(MediaType.TEXT_HTML)
    public String sayHtmlHello() {
        return "<html> " + "<title>" + "Hello Jersey" + "</title>"
                + "<body><h1>" + "Hello Jersey" + "</body></h1>" + "</html> ";

    }

}

我在tomcat 9上测试了它,我使用的URL是:

localhost:8080/rest/hello,标题为:

accept: application/json
accept-encoding: gzip, deflate
accept-language: en-US,en;q=0.8
user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36

我得到的是:

{
"name": "I'm a thing!"
}

祝你好运

更新:好吧,你没有使用maven,那么在你项目的lib文件夹中添加相同的jar...或者开始使用maven;-)

 类似资料:
  • 我的网络服务有一些问题,我试图从网络服务接收我的电影列表,但总有这个严重的错误。 这是我的模型: 还有一把刀和一个门面,但它们工作得很好! 以下是我的服务: 方法“onemovie”和“count”运行良好,我将在浏览器中显示xml,但当我调用“XMLForApp”时,服务器抛出异常。 我的客户在这里: 例外情况是:

  • 这是我从mysql数据库中删除数据的代码,我得到了这个错误。 在我选择名称并尝试提交后...它给我这个错误 HTTP状态500-内部服务器错误 类型异常报告 Message内部服务器错误 描述服务器遇到内部错误,无法满足此请求。 例外 组织。阿帕奇。贾斯珀。JaspereException:java。lang.NumberFormatException:空根本原因 JAVAlang.NumberF

  • 当我尝试使用JSP运行我的Web应用程序(基本CRUD)时,GlassFish服务器返回以下消息: HTTP状态500-内部服务器错误 类型异常报告 消息内部服务器错误 说明服务器遇到内部错误,无法满足此请求。 例外 java.lang.NullPointerException 注意GlassFish Server Open Source Edition 4.1日志中提供了异常及其根本原因的完整堆

  • 下面是我的一部分。jsp。 下面是我的错误: HTTP状态500–内部服务器错误 类型异常报告 消息在行[20]处处理[/home.jsp]时发生异常 说明服务器遇到意外情况,无法满足请求。 例外组织。阿帕奇。贾斯珀。JasperException:在第[20]行处理[/home.jsp]时发生异常 17:这是添加信息页 18: Stacktrace:org。阿帕奇。贾斯珀。servlet。Jsp

  • 当我尝试使用JSP运行我的Web应用程序时,GlassFish服务器返回以下消息: 我不知道该怎么办。我认为这个错误与找不到javax有关。servlet。jsp。jstl。glassfish服务器中的jar库

  • 我想知道这是否与Eclipse安装到权限有关,或者可能与项目结构有关?有人有线索吗?也许我应该寻找一个容器映像或其他东西来尝试在其上构建?多谢了。