【问题标题】:Java REST service @delete objectJava REST 服务 @delete 对象
【发布时间】:2015-04-20 13:23:29
【问题描述】:

我创建了一个 REST 服务,它可以完美地执行所有 CRUD 操作,但删除除外。当我处理删除请求时,一切都很好,直到ArrayList<User> 中的最后一个元素。当我删除最后一个时,由于某种原因,我得到了 500 内部服务器错误?当我将构造函数放在UserList类中创建默认2个用户时,它创建成功,执行删除请求后,我可以删除一个用户。当我尝试删除剩下的最后一个时,我得到了 500 错误,当我尝试列出所有创建的用户时,构造函数再次被调用,我又拥有了这 2 个默认用户?

删除 - 服务器端

@DELETE
@Path("/delete")
@Consumes("application/json")
public Response deleteUser(String input) {

    JSONParser parser = new JSONParser();
    Object obj = null;

    try {
        obj = parser.parse(input);
    } catch (ParseException e) {
        e.printStackTrace();
    }

    JSONObject jsonObject = (JSONObject) obj;

    String uName = (String) jsonObject.get("userName");

    try {
        uName = URLDecoder.decode(uName, "UTF-8");
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    }

    returnAll = usrList.getUsers();
    if (userExists(uName)) {
        for (User u : returnAll) {
            if (u.getUserName().equals(uName)) {
                returnAll.remove(u);
            }
        }

        return Response.status(204).entity("User " + uName + " deleted...").build();
    } else
        return Response.status(400).entity("No such user...").build();

}

用户列表类

import java.util.ArrayList;

public class UserList implements ListInterface {

    public UserList() {

        if (ListInterface.user.isEmpty()) {
            //populate list if empty

            User usr1 = new User();
            usr1.setUserName("No1");
            usr1.setFullName("Max Dax");
            ListInterface.user.add(usr1);

            User usr2 = new User();
            usr2.setUserName("MrX");
            usr2.setFullName("Ixs Oxs");
            ListInterface.user.add(usr2);
        }

    }

    public ArrayList<User> getUsers() {

        return ListInterface.user;
    }

}

列表接口类

import java.util.ArrayList;

public interface ListInterface {

    public static ArrayList<User> user = new ArrayList<User>();
    public ArrayList<User> getUsers();


}

我通过http://localhost:8080/rest/user/delete 链接进行连接,并在正文中提供 JSON {"userName":"user"}(我正在使用 chrome 高级休息客户端进行请求)。

【问题讨论】:

  • 在从returnAll=... 到最后一个return Response...400... 的所有行周围添加一个try{ ...}catch(Exception e){e.printStackTrace();}。你没有包含一些像 userExists() 这样的函数,我猜你在某处有一个空指针。

标签: java rest service server


【解决方案1】:

您操作正在迭代的列表。如果你捕捉到异常,它可能会更容易找到问题。但我认为它在这里:

for (User u : returnAll) {
        if (u.getUserName().equals(uName)) {
            returnAll.remove(u);
        }
    }

它可能会导致 ConcurrentModificationException

【讨论】:

    猜你喜欢
    • 2016-12-21
    • 1970-01-01
    • 2019-02-04
    • 2014-07-26
    • 2012-10-22
    • 1970-01-01
    • 2016-06-27
    • 1970-01-01
    • 2018-05-05
    相关资源
    最近更新 更多