Java REST 服务@delete 对象
Java REST service @delete object
我制作了一个 REST 服务,它可以完美地执行除删除之外的所有 CRUD 操作。当我处理删除请求时,一切都很好,直到 ArrayList<User>
中的最后一个元素。当我删除最后一个时,出于某种原因返回 500 内部服务器错误?当我把构造函数放在UserList
class中创建默认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();
}
用户列表class
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;
}
}
列表界面class
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
link 连接,在正文中我提供 JSON {"userName":"user"}
(我正在使用 chrome 高级休息客户端来处理请求)。
您操纵您正在迭代的列表。如果您捕获异常,可能会更容易找到问题。但我认为它在这里:
for (User u : returnAll) {
if (u.getUserName().equals(uName)) {
returnAll.remove(u);
}
}
它可能会导致 ConcurrentModificationException
我制作了一个 REST 服务,它可以完美地执行除删除之外的所有 CRUD 操作。当我处理删除请求时,一切都很好,直到 ArrayList<User>
中的最后一个元素。当我删除最后一个时,出于某种原因返回 500 内部服务器错误?当我把构造函数放在UserList
class中创建默认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();
}
用户列表class
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;
}
}
列表界面class
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
link 连接,在正文中我提供 JSON {"userName":"user"}
(我正在使用 chrome 高级休息客户端来处理请求)。
您操纵您正在迭代的列表。如果您捕获异常,可能会更容易找到问题。但我认为它在这里:
for (User u : returnAll) {
if (u.getUserName().equals(uName)) {
returnAll.remove(u);
}
}
它可能会导致 ConcurrentModificationException