2017-11-11 201 views
0

我是安靜的webservices和遵循java restful api教程的新手。 除DELETE請求外,所有HTTP請求都正常工作。 我面臨與此鏈接中所述相同的問題。 REST - HTTP Status 405 - Method Not AllowedDELETE在郵遞員中給予405

也,在預定義的標題值郵遞員表示 允許→GET,OPTIONS,PUT(圖像鏈接低於)

我下面的正確語法和URL格式按說明書(在粘貼圖像),但刪除不起作用。

allowed : GET,OPTIONS,PUT.img

請讓我知道我在哪裏丟失。

編輯:源代碼:

import java.util.List; 

import javax.ws.rs.Consumes; 
import javax.ws.rs.DELETE; 
import javax.ws.rs.GET; 
import javax.ws.rs.POST; 
import javax.ws.rs.PUT; 
import javax.ws.rs.Path; 
import javax.ws.rs.PathParam; 
import javax.ws.rs.Produces; 
import javax.ws.rs.core.MediaType; 

import org.koushik.javabrains.messenger.model.Message; 
import org.koushik.javabrains.messenger.service.MessageService; 



@Path("/messages") 
public class MessageResource { 
    MessageService messageService = new MessageService(); 
    @GET 
    @Produces(MediaType.APPLICATION_JSON) 
    public List<Message> getMessages(){ 
     System.out.println("Hello There"); 
     List<Message> returnedList = messageService.getAllMessages(); 
     System.out.println(returnedList); 
     return returnedList; 
    } 
    @GET 
    @Path("/{messageId}") 
    @Produces(MediaType.APPLICATION_JSON) 
    public Message getMessage(@PathParam("messageId") long messageId){ 

     System.out.println("Message returned"); 
     return messageService.getMessage(messageId); 

    } 

    @POST 
    @Produces(MediaType.APPLICATION_JSON) 
    public Message addMessage(Message message){ 
     return messageService.addMessage(message); 
    } 

    @PUT 
    @Path("/{messageId}") 
    @Produces(MediaType.APPLICATION_JSON) 
    @Consumes(MediaType.APPLICATION_JSON) 
    public Message updateMessage(@PathParam("messageId") long id , Message message){ 
     message.setId(id); 
     return messageService.updateMessage(message); 
    } 

    @DELETE 
    @Path("/messageId") 
    @Produces(MediaType.APPLICATION_JSON) 
    public void deleteMessage(@PathParam("messageId") long id){ 
     System.out.println("Hello There"); 
     messageService.removeMessage(id); 
    } 
} 






package org.koushik.javabrains.messenger.service; 

import java.util.ArrayList; 
import java.util.List; 
import java.util.Map; 

import org.koushik.javabrains.messenger.database.DatabaseClass; 
import org.koushik.javabrains.messenger.model.Message; 

public class MessageService { 

    private Map<Long , Message> messages = DatabaseClass.getMessages(); 

    public MessageService(){ 

     messages.put(1L, new Message(1, "Hello World" , "koushik")); 
     messages.put(2L, new Message(2, "Hello Jersey" , "Koushik")); 

    } 

    public List<Message> getAllMessages(){ 

     return new ArrayList<Message>(messages.values()); 
    } 

    public Message getMessage(long id){ 
     Message m = messages.get(id); 
     System.out.println("Value of message "+m); 
     return m; 
    } 

    public Message addMessage(Message message){ 

     message.setId(messages.size()+1); 
     messages.put(message.getId(), message); 
     return message; 
    } 

    public Message updateMessage(Message message){ 

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

    public Message removeMessage(long id){ 
     return messages.remove(id); 
    } 
} 






package org.koushik.javabrains.messenger.database; 

import java.util.HashMap; 
import java.util.Map; 

import org.koushik.javabrains.messenger.model.Message; 
import org.koushik.javabrains.messenger.model.Profile; 

public class DatabaseClass { 

    private static Map<Long , Message> messages = new HashMap(); 

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

    public static Map<Long , Message> getMessages() { 

     return messages; 
    } 

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

} 

除了刪除其他請求都工作正常。 發送DELETE服務器正在返回HTTP -405方法不允許。

也發送刪除請求,則在標題值郵遞員顯示 允許→GET,OPTIONS,PUT

感謝

+0

通常人們會問你,如果你有機會到服務器,或者重新檢查您的網址,那或許服務器不允許刪除操作。但是我確定你正在關注Javabrains的教程,我自己也經歷了這個教程,並且我知道你的url很好。它看起來像錯誤是在你的服務器代碼中的某個地方..也顯示了這一點? – Ray

+0

嗨雷,我附上服務器代碼請看看這個。我能夠執行除刪除之外的其他操作。 – Gaurabh

+0

正如後面提到的那樣......將應用程序類型寫爲* application/json *而不是* text/html * –

回答

0

確保你沒有在郵差輸入的任何URL參數,也確保你不會在postman中傳遞任何頭文件。 刪除請求應該是純粹的而不是這些。

此外,字符串消息ID需要放在大括號中。這將是你的405大部分原因。 如下更改路徑註釋並嘗試。

@Path(「/ {} MESSAGEID」)