簡體   English   中英

DELETE方法無法正確刪除實體

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM