2012-02-20 28 views
6

Tôi đang phát triển một ứng dụng web nơi tôi có một hình thức như vậySử dụng Jersey để đọc dữ liệu mẫu

<form name="form" action="create-user" method="post"> 
    <input name="accept" type="checkbox"><span>{{acceptLegalTerms}}</span><br> 
    <input type="submit" value="{{Continue}}" class="primary fright"/> 
</form> 

Về phía server, Chúng tôi đang sử dụng Jersey (trên game). Và đây là những gì tôi đang cố gắng sử dụng để đọc các giá trị POST

@POST 
@Consumes(MediaType.MULTIPART_FORM_DATA) 
@Path("create-user") 
public Response createUser(@FormDataParam("accept") boolean acceptForm) { 
    return Response.ok().entity(acceptForm).build(); 
} 

Nhưng nó không hoạt động ... Nó trả về cho tôi ...

HTTP ERROR 415 

Problem accessing /login/create-user. Reason: 

Unsupported Media Type 

Bất kỳ ý tưởng? Tôi đang làm gì sai?

Cảm ơn!

Trả lời

13

thử điều này:

@Path("test") 
@POST 
@Consumes(MediaType.APPLICATION_FORM_URLENCODED) 
public String testForm(@FormParam("accept") String accept) { 
    return accept; 
} 

Multipart là một cái gì đó hơi khác nhau, xem mẫu áo nhiều phần dữ liệu-webapp hoặc xem http://www.w3.org/Protocols/rfc1341/7_2_Multipart.html. Biểu mẫu web của bạn không tạo ra nó, vì vậy Jersey trả về đúng 415 - Loại phương tiện không được hỗ trợ, vì bạn không có bất kỳ tài nguyên nào đang xử lý loại phương tiện "application/x-www-form-urlencoded".

+2

Bạn cũng sẽ cần [jersey-multipart] (http://search.maven.org/#search|ga|1|a%3A%22jersey-multipart%22). –

+0

@DrewStephens Có thể có một đường dẫn duy nhất phục vụ cả hai yêu cầu POST của urlencode hoặc multipart? http://stackoverflow.com/questions/19104413/jersey-switch-on-content-type-dynamically –

+1

Có cách nào để gửi biểu mẫu với 10 trường, nhưng không thêm dòng 10 '@ FormParam' –

1

Để đơn giản: trong trường hợp đó là trình xử lý yêu cầu duy nhất được ánh xạ tới URL cụ thể (trong trường hợp đó là "test") và với phương thức HTTP cụ thể (POST), bạn có thể tránh việc sử dụng @Consumes!

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