[英]DELETE method won't properly delete entity
我正在嘗試刪除通過POST
請求使用JSON獲得的對象。 然后,通過使用對象id,我想使用DELETE
請求將其DELETE
。 DELETE
請求以204 No Content
響應。
很好,但是當我使用GET
請求獲取所有現有對象時,被刪除的對象仍然存在。
我通過將其id
包含在@PathParam()
刪除該對象。
我已經使用純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;
}
}
Message.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();
}
}
MessageService.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);
}
}
MessageResource.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);
}
}
我在這里還有另一個問題 ,它包含另一個名為Profile
對象。 ProfileResource.java
類具有POST,PUT,GET和DELETE方法。 如果我刪除了個人資料,我得到的答復是200 OK
而不是204 No Content
,我覺得很奇怪,因為我應該得到204 No Content
。 無論哪種方式,配置文件都會成功刪除。
因為正在創建MessageService
所以每個請求都會在資源中調用構造函數。
private MessageService mService = new MessageService();
如果使用POST和DELETE創建新消息,則同樣可以使用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.