2012-05-18 33 views
12

[bằng cách sử dụng Apache Tomcat/7.0.27]Rất đặc biệt: HTTP Status 405 - Phương pháp không được phép

Dường như tôi chỉ nhận được lỗi này

  • (HTTP Status 405 - Phương pháp không được phép)

khi tôi cố thực hiện yêu cầu REST trực tiếp từ trình duyệt.

ví dụ bằng cách dán này vào thanh địa chỉ:

http://localhost:8080/restExample/rest/catalog/video/14951/hello 

Khi tôi chạy client thử nghiệm của tôi Main.java tất cả mọi thứ hoạt động tốt.

Bất kỳ ý tưởng nào về lý do tại sao nó không cho phép tôi thực thi REST thông qua trình duyệt?

Client Side:

public class Main{ 
    public static void main(String [] args){ 
     ClientConfig config = new DefaultClientConfig(); 
     Client client = Client.create(config); 
     WebResource service = client.resource(getBaseURI(_package)); 
     runPutRequest(service,"video/128/This is the content with the new description"); 
    } 
} 

... 
private static void runPutRequest(WebResource service,String path){ 
     String response = service.path("rest/catalog/"+path).accept(MediaType.APPLICATION_XML).put(String.class); 
     System.out.println("Post Response :"+response); 
    } 

Server side:

@PUT 
@Path("/video/{video-id}/{short-descr}") 
@Consumes(MediaType.TEXT_PLAIN) 
@Produces(MediaType.APPLICATION_XML) 
public Video updateVideo(@PathParam("video-id") int contentid, 
         @PathParam("short-descr") String descr) 
{  
    //Video video = searchByContentId(contentid); 
    Video video = videoMap.get(contentid); 
    video.setDescription(descr); 

    videoMap.put(contentid,video); 

    if(videoMap.get(contentid) != null){ 
     return videoMap.get(contentid); 
    }else{ 
     throw new UnsupportedOperationException("NO object found"); 
    } 
} 
+1

Đặt vs nhận .... – esej

Trả lời

18

Trình duyệt sẽ phát hành yêu cầu GET cho tài nguyên của bạn - mà bạn đã khai báo là @PUT ở phía máy chủ và PUT-ing cho nó từ mã phía máy khách của bạn. Trình duyệt đang cố gắng 'tìm nạp' (hoặc GET) tài nguyên và không có gì tồn tại cho @GET

+0

Có cách nào để kiểm tra @PUT trong trình duyệt không? – Fabii

+0

thử tạo một cuộc gọi jQuery đơn giản bằng cách sử dụng '$ .ajax' với' phương thức: 'PUT'' và chuyển bất kỳ tham số/dữ liệu nào bạn cần ... – PhD

+1

Bạn có thể sử dụng Fiddler để tùy chỉnh tạo các yêu cầu này cho bạn :) – PhD

6

Nói chung, trình duyệt sử dụng GET HTTP phương pháp để thực hiện yêu cầu. Thành phần phía máy chủ của bạn chỉ có khả năng phản hồi các yêu cầu PUT và đó là lý do bạn nhận được mã lỗi đó.

+0

Cảm ơn, rất hữu ích – Fabii

2

Có các trình khách REST cho các trình duyệt có khả năng thực hiện các yêu cầu PUT, POST và DELETE. Tôi thích Simple REST Client dành cho Chrome.

Các vấn đề liên quan