[英]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.