POST
リクエストでJSONを使用して取得したオブジェクトを削除しようとしています。オブジェクトIDを使用して、DELETE
リクエストを使用してオブジェクトIDを削除したいとします。 リクエストは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() '操作はそのインスタンスからデータを取り除くだけで、基礎となるDBからデータを取り除いているようです。要求ごとにサービスが作成された場合、削除操作はその要求の期間だけ有効です。 – sisyphus
私はポストと同じことに遭遇し、削除も!あなたはそれを解決しましたか? 個々に、これらのメソッドは正常に動作していますが、私がpostメソッドでgetメソッドを使用すると、コンストラクタで宣言した値が表示されてしまいます。 – Chip