簡體   English   中英

Java REST服務@delete對象

[英]Java REST service @delete object

我做了一個REST服務,除了刪除之外,它可以完美地執行所有CRUD操作。 當我處理刪除請求時,一切都很好,直到ArrayList<User>的最后一個元素為止。 當我刪除最后一個服務器時,由於某種原因,我會返回500內部服務器錯誤? 當我將構造函數放在UserList類中以創建默認的2個用戶時,它將成功創建它們,並且在執行刪除請求后,我可以刪除一個用戶。 當我嘗試刪除剩余的最后一個時,出現500錯誤,並且當我嘗試列出所有創建的用戶時,以某種方式再次調用了構造函數,而我又有這兩個默認用戶?

刪除-服務器端

@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高級rest客戶端進行請求)。

您可以操縱要迭代的列表。 如果捕獲到異常,則可能更容易發現問題。 但我認為它在這里:

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

它可能導致ConcurrentModificationException

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM