gpt4 book ai didi

java - DELETE 方法无法正确删除实体

转载 作者:行者123 更新时间:2023-12-01 09:41:49 27 4
gpt4 key购买 nike

我正在尝试删除通过 POST 请求使用 JSON 获取的对象。然后,通过使用对象 ID,我想使用 DELETE 请求删除它。 DELETE 请求返回 204 No Content

这一切都很好,但是当我使用 GET 请求获取所有现有对象时,被删除的对象仍然存在。

我通过将对象的 id 包含为 @PathParam() 来删除该对象。

我仅使用纯 Java 测试了该操作,并且运行良好。

DatabaseClass.java

public class DatabaseClass {

private static Map<Integer, Message> messages = new HashMap<>();
private static Map<String, Profile> profiles = new HashMap<>();

public static Map<Integer, Message> getAllMessages() {
return messages;
}

public static Map<String, Profile> getAllProfiles() {
return profiles;
}
}

消息.java

@XmlRootElement
public class Message {

private Integer id;
private String author;
private String text;
private Date dateCreated;

public Message() {}

public Message(String author, String text) {
this.author = author;
this.text = text;
this.dateCreated = new Date();
}

public Integer getId() {
return id;
}

public void setId(Integer id) {
this.id = id;
}

public String getAuthor() {
return author;
}

public void setAuthor(String author) {
this.author = author;
}

public String getText() {
return text;
}

public void setText(String text) {
this.text = text;
}

public Date getDateCreated() {
return dateCreated;
}

public void setDateCreated(Date dateCreated) {
this.dateCreated = dateCreated;
}

@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("ID: " + id + "\n");
sb.append("Author: " + author + "\n");
sb.append("Text: " + text + "\n");
sb.append("Date Created: " + dateCreated + "\n\n");

return sb.toString();
}
}

消息服务.java

public class MessageService {

private Map<Integer, Message> messages = DatabaseClass.getAllMessages();

public MessageService() {}

public List<Message> getMessages() {
return new ArrayList<>(messages.values());
}

public Message getMessage(Integer id) {
if(!messages.containsKey(id)) {
throw new NotFoundException("Message was not found.");
}

return messages.get(id);
}

public Message addMessage(Message message) {
message.setId(messages.size() + 1);
message.setDateCreated(new Date());

messages.put(message.getId(), message);

return messages.get(message.getId());
}

public Message updateMessage(Message message) {
if(message.getId() <= 0) {
return null;
}
messages.put(message.getId(), message);

return messages.get(message.getId());
}

public Message deleteMessage(Integer id) {
return messages.remove(id);
}
}

消息资源.java

@Path("messages")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public class MessageResource {

private MessageService mService = new MessageService();

@POST
public Message addMessage(Message message) {
return mService.addMessage(message);
}

@GET
public List<Message> getMessages() {
return mService.getMessages();
}

@GET
@Path("{messageId}")
public Message getMessage(@PathParam("messageId") Integer messageId) {
return mService.getMessage(messageId);
}

@PUT
@Path("{messageId}")
public Message updateMessage(@PathParam("messageId") Integer messageId,
Message message) {
return mService.updateMessage(message);
}

@DELETE
@Path("{messagesId}")
public Message deleteMessage(@PathParam("messageId") Integer messageId) {
return mService.deleteMessage(messageId);
}
}

我还有另一个question在这里,它包含另一个名为 Profile 的对象。 ProfileResource.java 类具有 POST、PUT、GET 和 DELETE 方法。如果我删除了个人资料,我得到的响应是 200 OK 而不是 204 No Content,我觉得这很奇怪,因为我应该得到 204 No Content。无论哪种方式,配置文件都会成功删除。

最佳答案

因为 MessageService 正在创建每个调用资源中构造函数的请求。

private MessageService mService = new MessageService();

如果您使用 POST 和 DELETE 创建新消息,则同样有效。

关于java - DELETE 方法无法正确删除实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38394285/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com