我想通過POST
請求刪除我通過使用JSON得到的對象。然後通過使用對象ID,我想使用DELETE
請求將其刪除。 DELETE
請求迴應204 No Content
。DELETE方法將不會正確刪除實體
這一切都很好,但當我使用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;
}
}
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);
}
}
我在這裏還有另一個question,它包含另一個名爲Profile
的對象。 ProfileResource.java
類具有POST,PUT,GET和DELETE方法。如果我刪除了一個配置文件,我得到的迴應是200 OK
而不是204 No Content
,我覺得很奇怪,因爲我應該得到一個204 No Content
。無論哪種方式成功刪除配置文件。
你如何實例化你的資源/服務對象?它看起來像服務從'DatabaseClass'中檢索事件作爲實例初始化的一部分,而remove()操作只是從該實例中刪除數據,而不是從底層數據庫中刪除數據。如果服務是按照請求創建的,那麼刪除操作僅在該請求期間有效。 – sisyphus
我也遇到過和刪除一樣的東西!你解決了嗎? 個別地,這些方法工作正常,但是當我在postman中使用get方法時,它最終會顯示我們在構造函數中聲明的那些值。 – Chip