2017-11-11 30 views
0

저는 편안한 webservices를 처음 접하고 자바 편안한 API 튜토리얼을 접했습니다. DELETE 요청을 제외한 모든 HTTP 요청이 정상적으로 작동합니다. 이 링크에서 설명한 것과 동일한 문제가 있습니다. 가 → GET, OPTIONS 위치하고, 나 사양에 따라, 정확한 구문 및 URL 형식 다음하고우체부에서 405 번을 삭제하십시오.

(영상 링크 이하이다()에 붙여 허용 또한, 소정의 헤더 값 배달부에서 보이고 REST - HTTP Status 405 - Method Not Allowed

이미지) 삭제가 작동하지 않습니다.

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 메소드를 리턴 중입니다. 허용되지 않습니다. 헤더 값 우체부에서 다음 요청을 삭제 보내는에서도

는 우편 배달에 입력 된 URL 매개 변수가없는 있는지, 또한 확인

감사

+0

일반적으로 사람들이 서버에 액세스 할 수있는 경우를 요청할 것, 또는 URL을 다시 확인하고, 그 아마도 서버가 DELETE 작업을 허용하지 않습니다. 하지만 Javabrains의 튜토리얼을 따라 가고 있다고 확신합니다. URL을 잘 알고 있습니다. 오류가 서버 코드의 어딘가에있는 것 같습니다. – Ray

+0

안녕하세요 레이, 제가 서버 코드를 첨부 해주세요. 나는 삭제 이외의 다른 작업을 수행 할 수있다. – Gaurabh

+0

게시물에서 언급했듯이 ... * application/json *이 아닌 * text/html * –

답변

0

확인을 PUT, 옵션을 GET 허용 보여주는 →됩니다 우편 배달부에 머리글을 전달하지 마십시오. 삭제 요청은 이러한 내용이 없으면 명백해야합니다.

또한 문자열 메시지 ID는 중괄호로 묶어야합니다. 그게 대부분 405에 대한 이유가 될 것입니다. 아래와 같이 경로 주석을 변경하고 시도하십시오.

@Path ("/ {messageId가}")