2010-11-13 29 views
7

Tôi đã tạo một ứng dụng Spring REST, nơi bạn có thể thực hiện các hoạt động CRUD dựa trên các phương thức HTTP POST, PUT, GET, DELETE. Tôi có mẫu URI điển hình củaLược đồ mã hóa URL REST của mùa xuân:% 20 hoặc + Cái nào?

http://host/root/{id}/{name}/{address} and etc. 

Chúng tôi có một khách hàng đang truy cập dịch vụ REST này. Dường như họ đang gửi thông số cho tên và địa chỉ nhiều từ theo dạng sau:

http://host/root/11/John+Smith/10+Las+Vegas+USA 

Họ đang sử dụng lược đồ mã hóa HTML dựa trên loại ứng dụng/x-www-form-urlencoded. Theo bài viết trong Wikipedia

Ứng dụng/x-www-form-urlencoded loại

Các mã hóa được sử dụng bởi mặc định dựa trên một phiên bản rất sớm của URI quy tắc trăm mã hóa nói chung , với số lượng sửa đổi chẳng hạn như bình thường hóa dòng mới và thay thế dấu cách bằng dấu "+" thay vì "% 20". - http://en.wikipedia.org/wiki/Percent-encoding

Tuy nhiên, chương trình mã hóa URL chuẩn sử dụng% 20 trong không gian thay thế trong mẫu URI. Cái nào đúng?

Spring REST của tôi tự động chuyển đổi% 20 thành dấu cách. Nó được giải thích một cách chính xác. Tôi đang sử dụng Spring 3.0.4. Khi + được đáp ứng bởi dịch vụ REST của tôi, nó được chấp nhận như là. Tất nhiên khi tôi đặt xác thực để loại trừ +, nó thực sự bị loại trừ như mong đợi.

Tôi có nằm trong tiêu chuẩn hoặc có tiêu chuẩn kép như vậy không? Hoặc là khách hàng sử dụng một chương trình cổ xưa?

Trả lời

11

Điểm là application/x-www-form-urlencoded chỉ có thể sử dụng chỉ trong tham số yêu cầu, trong khi mã hóa phần trăm cũng được hỗ trợ trong đường dẫn.

Vì vậy,

http://host/root/11/?name=John+Smith&address=10+Las+Vegas+USA

là tốt và sẽ được giải mã đúng bởi Spring MVC, nhưng

http://host/root/11/John+Smith/10+Las+Vegas+USA

là sai và Spring MVC không giải mã nó, bởi vì các hình thức sau đây nên được sử dụng thay vào đó:

http://host/root/11/John%20Smith/10%20Las%20Vegas%20USA
+0

Cảm ơn bạn đã trả lời. Đó là những gì tôi nghĩ. Định dạng "http: // host/root/11/John + Smith/10 + Las + Vegas + USA" là chính xác để sử dụng khi sử dụng Spring REST như trái ngược với Spring MVC. – chris

+0

Với Spring MVC "http: // host/root/11 /? Name = John + Smith & address = 10 + Las + Vegas + USA" là chính xác. Định dạng "http: // host/root/11/John% 20Smith/10% 20Las% 20Vegas% 20USA" cũng chính xác về Spring MVC. – chris

+0

Bây giờ khi tôi nói với một lập trình viên khác rằng chúng tôi có một dịch vụ REST tại sao anh ta lại giả sử sử dụng lược đồ mã hóa của ứng dụng/x-www-form-urlencoded để chuyển đổi không gian thành "+". Đây không phải là thuật ngữ chuẩn sao? Hoặc là sai lầm của tôi để giả định rằng họ biết điều đó? Hay tôi là người đưa ra giả định sai? – chris

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