REST + Java +状态500内部错误

时间:2012-02-29 06:28:24

标签: java rest

好的,所以我正在使用Java编写REST服务器并尝试测试它,但我一直收到错误代码500请帮忙。我已经逐步完成了代码并知道它使用正确格式化的DataClass对象的ArrayList到达此方法的底部(我已经检查过它们并且没有成功运行REST前端)。

这是我正在调用的REST方法

@GET
    @Produces(MediaType.APPLICATION_XML)
    public List<DataClass> receiveXML(
            @DefaultValue("null") @QueryParam("artist") String artist,
            @DefaultValue("null") @QueryParam("title") String title,
            @DefaultValue("null") @QueryParam("album") String album,
            @DefaultValue("null") @QueryParam("genre") String genre,
            @DefaultValue("null") @QueryParam("type") String type,
            @DefaultValue("false") @QueryParam("open") Boolean open,
            @DefaultValue("false") @QueryParam("close") Boolean close,
            @DefaultValue("noPath") @QueryParam("path") String path,
            @DefaultValue("noKey") @QueryParam("key") String key,
            @DefaultValue("null") @QueryParam("show") String show,
            @DefaultValue("null") @QueryParam("season") String season,
            @DefaultValue("null") @QueryParam("format") String format)
    {   

        if(!artist.equals("null"))
            this.artist = artist;
        if(!title.equals("null"))
            this.title = title;
        if(!album.equals("null"))
            this.album = album;
        if(!genre.equals("null"))
            this.genre = genre;
        if(!type.equals("null"))
            this.type = type;
        if(!open.equals("false"))
            this.open = open;
        if(!close.equals("false"))
            this.close = close;
        if(!path.equals("noPath"))
            this.path = path;
        if(!key.equals("noKey"))
            this.keyword = key;
        if(!show.equals("null"))
            this.show = show;
        if(!season.equals("null"))
            this.season = season;
        if(!format.equals("null"))
            this.format = format;

        MultivaluedMap<String,String> queryParams = buildMap();
        List<DataClass> resp = receive(queryParams);
        return resp;    
    }

这是DataClass

@XmlRootElement
public class DataClass {
    public String pathname;
    ArrayList<String> parsedSet;
    ResultSet resultSet;
    public String id, path, type, category, size, update, idMeta, title, description;
    public String genre, album, artist, show, season;

    public DataClass(ResultSet resultSet){
        this.resultSet = resultSet;
        parsedSet = new ArrayList<String>();
        setStringVariables();
    }
    /**
     * Sets the pathname variable of the local file to be returned
     * @param pathname
     */
    public DataClass(String pathname){
        this.pathname = pathname;
    }


        methods to set the fields...

}

以下是我如何调用服务器,我知道服务器正在被正确调用,因为我有一个只返回字符串的测试方法。

public static void testXML() {
    //a map that adds parameters that will then be added to the the WebService
    MultivaluedMap<String, String> queryParams = new MultivaluedMapImpl();
    queryParams.add("type", "music");
    //retrieve info for an artist in XML format
    System.out.println(service.path("rest").path("media").queryParams(queryParams).accept(
            MediaType.APPLICATION_XML).get(String.class));
}

这是我的错误

Exception in thread "main" com.sun.jersey.api.client.UniformInterfaceException: GET http://localhost:8080/TigrisRESTServer/rest/media?type=music returned a response status of 500 Internal Server Error
    at com.sun.jersey.api.client.WebResource.handle(WebResource.java:676)
    at com.sun.jersey.api.client.WebResource.access$200(WebResource.java:74)
    at com.sun.jersey.api.client.WebResource$Builder.get(WebResource.java:503)
    at tigris.restserver.client.ourClient.testXML(ourClient.java:45)
    at tigris.restserver.client.ourClient.main(ourClient.java:28)

抱歉,我忘了加入一些东西

定义receiveXML的类具有此

@Path("/media")
public class Server {
}

这是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>RestServer</display-name>
  <servlet>
    <servlet-name>Tigris REST Server App</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>tigris.restserver.connection</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>Tigris REST Server App</servlet-name>
    <url-pattern>/rest/*</url-pattern>
  </servlet-mapping>
</web-app>

这样可以正常工作(只需返回一个字符串)

这是客户端

public static void testTEST() {
    System.out.println(service.path("rest").path("media").accept(
            MediaType.TEXT_PLAIN).get(String.class));
}

这是服务器端

@GET
@Produces(MediaType.TEXT_PLAIN)
public String sayPlainTextHello() {
    return "Hello Server";
}

谢谢 twain249

1 个答案:

答案 0 :(得分:1)

好像你忘记了它应该映射的路径。

@Path("/rest/")

GET http://localhost:8080/TigrisRESTServer/rest/media?type=music

如果你想映射URL / rest /那是。

例如,请参阅此链接Jersey Documentation