Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jersey web服务提供了javax.servlet.ServletException:_Java_Web Services_Rest_Jersey_Tomcat7 - Fatal编程技术网

Jersey web服务提供了javax.servlet.ServletException:

Jersey web服务提供了javax.servlet.ServletException:,java,web-services,rest,jersey,tomcat7,Java,Web Services,Rest,Jersey,Tomcat7,好的,我的web服务有问题 我正在尝试为一个用户创建一个API,但在我部署了应用程序并尝试获取所有用户后,它会给我一个异常 以下是我的api类: package api; import java.util.ArrayList; import javax.ws.rs.Consumes; import javax.ws.rs.GET; import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.PathParam;

好的,我的web服务有问题

我正在尝试为一个用户创建一个API,但在我部署了应用程序并尝试获取所有用户后,它会给我一个异常

以下是我的api类:

package api;


import java.util.ArrayList;

import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;

import model.UserManager;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import dto.User;

@Path("/user")
public class UserAPI {

    @POST 
    @Path("create-user/{user}")
    @Consumes(MediaType.APPLICATION_JSON)
    @Produces(MediaType.APPLICATION_JSON)
    public Response saveUser(@PathParam("user") User user) throws JSONException {
        UserManager userManager = new UserManager();
        userManager.createUser(user);

        return Response.status(200).build();    
    }

    @GET
    @Produces(MediaType.APPLICATION_JSON)
    public JSONObject getAllUsers() throws JSONException {
        JSONObject users = null;
        try {
            ArrayList<User> usersList = null;
            UserManager userManager = new UserManager();
            usersList = userManager.getUsers();
            JSONObject usersObject = new JSONObject();
            for(int i = 0; i < usersList.size(); i++) {
                usersObject.put("users", usersList);
            }
            users = usersObject;
        } catch(Exception e) {
            e.printStackTrace();
        }
        return users;   
    }

    @POST 
    @Path("edit-user/{id}")
    @Consumes(MediaType.APPLICATION_JSON)
    @Produces(MediaType.APPLICATION_JSON)
    public Response editUser(@PathParam("id") int id) throws JSONException {
        UserManager userManager = new UserManager();
        userManager.editUser(id);

        return Response.status(200).build();    
    }

    @POST 
    @Path("delete-user/{id}")
    @Consumes(MediaType.APPLICATION_JSON)
    @Produces(MediaType.APPLICATION_JSON)
    public Response deleteUser(@PathParam("id") int id) throws JSONException {
        UserManager userManager = new UserManager();
        userManager.deleteUser(id);

        return Response.status(200).build();    
    }

    @POST 
    @Path("user-login/{user}")
    @Consumes(MediaType.APPLICATION_JSON)
    @Produces(MediaType.APPLICATION_JSON)
    public Response userLogin(@PathParam("user") User user) throws JSONException {
        UserManager userManager = new UserManager();
        userManager.userLogin(user);

        return Response.status(200).build();    
    }
}

为什么不按原样返回用户列表,而不是将其转换为json对象? 试试这个:

@GET
@Produces(MediaType.APPLICATION_JSON)
public List<User> getAllUsers() {
    JSONObject users = null;
    try {
        ArrayList<User> usersList = null;
        UserManager userManager = new UserManager();
        usersList = userManager.getUsers();
    } catch(Exception e) {
        e.printStackTrace();
    }
    return usersList;   
}
}))

如果它仍然不起作用,那么您正在使用的库集可能会出现问题。 因此,我建议您使用GlassFish 4.0应用程序服务器,而不是Tomcat服务器。
如果您使用GlassFish服务器,则不得在类路径中包含任何jersey jar,因为GlassFish服务器本身具有所有与jersey相关的jar。

首先,您要将用户对象作为PathParam提交。这行不通
此外,我还想建议您,将UserManager设置为单例。
然后,您应该使用GET、PUT、POST、DELETE,而不仅仅是GET和POST
我认为例外情况是您在web.xml中出错,jersey无法找到(或任何)路径。因此,请给我们web.xml来证明这一点,您也可以使用pom.xml来检查这一点。 顺便说一句,泽西岛带来了(联合国)封送员,没有理由使用JSONObject

这里有一些东西:

简单web.xml

<?xml version="1.0" encoding="UTF-8"?>
    <!-- not required with servlet 3.x -->
    <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
    <servlet>
        <servlet-name>REST</servlet-name>
        <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
        <init-param>
            <param-name>javax.ws.rs.Application</param-name>
            <param-value>path.to.ResourceConfigOrApplication</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>REST</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>
</web-app>
以及简单资源(基于您的):

@Path(“/users”)//从一个用户更改为另一个用户
公共类用户API{
@职位
@使用(MediaType.APPLICATION_JSON)
@产生(MediaType.APPLICATION_JSON)
公共响应存储用户(用户){
user=UserManager.getInstance().createUser(用户);
返回Response.ok(user.build();
}
@得到
@产生(MediaType.APPLICATION_JSON)
公众回应{
List users=UserManager.getInstance().getUsers();
GenericeEntity实体=新的GenericeEntity(
使用者
){};
返回Response.ok(entity.build();
}
@放置//编辑用户->放置
@路径(“/{id}”)
@使用(MediaType.APPLICATION_JSON)
@产生(MediaType.APPLICATION_JSON)
公共响应editUser(@PathParam(“id”)整数id,用户){
user=UserManager.getInstance().editUser(id,user);//检查id和uder.id,如果用户存在等
返回Response.ok(user.build();
}
@删除//删除用户->删除
@路径(“/{id}”)
@产生(MediaType.APPLICATION_JSON)
公共响应deleteUser(@PathParam(“id”)整数id){
UserManager.getInstance().deleteUser(id);
返回Response.ok().build();
}
}

Json对象的反序列化是否正确?你查过了吗?没有。但这是GET方法的一个问题?因为即使我只是在没有“用户”部分的情况下转到,也会出现错误。是否尝试将媒体类型更改为什么?为什么我要改变呢?我们可以试试纯文本
$.ajax({
type: "GET",
url: "http://localhost:8080/YourProjectName/rest/user",
dataType: "json",
success: function(jsonString) {
   alert(jsonString);
},
error: function(xhr) {                     
    alert(JSON.stringify(xhr));
}
<?xml version="1.0" encoding="UTF-8"?>
    <!-- not required with servlet 3.x -->
    <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
    <servlet>
        <servlet-name>REST</servlet-name>
        <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
        <init-param>
            <param-name>javax.ws.rs.Application</param-name>
            <param-value>path.to.ResourceConfigOrApplication</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>REST</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>
</web-app>
<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.plugin.version>2.5.1</maven.compiler.plugin.version>
    <tomcat7.version>2.1</tomcat7.version>
    <jersey.version>2.12</jersey.version>
</properties>
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.glassfish.jersey</groupId>
            <artifactId>jersey-bom</artifactId>
            <version>${jersey.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>
<dependencies>
    <!-- JERSEY -->
    <dependency>
        <groupId>org.glassfish.jersey.core</groupId>
        <artifactId>jersey-server</artifactId>
    </dependency>
    <dependency>
        <groupId>org.glassfish.jersey.bundles</groupId>
        <artifactId>jaxrs-ri</artifactId>
    </dependency>
    <dependency>
        <groupId>org.glassfish.jersey.containers</groupId>
        <artifactId>jersey-container-servlet</artifactId>
    </dependency>
    <dependency>
        <groupId>org.glassfish.jersey.media</groupId>
        <artifactId>jersey-media-json-processing</artifactId>
    </dependency>
    <dependency>
        <groupId>org.glassfish.jersey.media</groupId>
        <artifactId>jersey-media-json-jackson</artifactId>
    </dependency>
    <dependency>
        <groupId>org.glassfish.jersey.media</groupId>
        <artifactId>jersey-media-multipart</artifactId>
    </dependency>
    <dependency>
        <groupId>org.glassfish.jersey.media</groupId>
        <artifactId>jersey-media-moxy</artifactId>
    </dependency> 
    // ...
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class User implements Serializable {

    private static final long serialVersionUID = 1L;

    @XmlElement(name="id")
    private Integer id;

    @XmlElement(name="username")
    private String username;

    // ...
}
@Path("/users") // changed from user to users 
public class UserAPI {

    @POST 
    @Consumes(MediaType.APPLICATION_JSON)
    @Produces(MediaType.APPLICATION_JSON)
    public Response saveUser(User user) {
        user = UserManager.getInstance().createUser(user);
        return Response.ok(user).build();    
    }

    @GET
    @Produces(MediaType.APPLICATION_JSON)
    public Response getAllUsers() {
        List<User> users = UserManager.getInstance().getUsers();
        GenericEntity<List<User>> entity = new GenericEntity<List<User>>(
            users
        ){};
        return Response.ok( entity ).build();
    }

    @PUT // edit-user -> PUT 
    @Path("/{id}")
    @Consumes(MediaType.APPLICATION_JSON)
    @Produces(MediaType.APPLICATION_JSON)
    public Response editUser(@PathParam("id") Integer id, User user) {
        user = UserManager.getInstance().editUser(id, user); // check id and uder.id, if user exists etc
        return Response.ok(user).build();
    }

    @DELETE // delete-user -> DELETE
    @Path("/{id}")
    @Produces(MediaType.APPLICATION_JSON)
    public Response deleteUser(@PathParam("id") Integer id) {
        UserManager.getInstance().deleteUser(id);
        return Response.ok().build();    
    }
}