2012-01-30 28 views
8

Tôi gặp vấn đề lạ ở đây, không chắc chắn đây có phải là lỗi hay không. Dự án đang chạy trong Spring Framework.Chuỗi truy vấn được giải mã bởi Spring Framework

Quan điểm:

<form method="GET" action="someUrl.htm" enctype="application/x-www-form-urlencoded" > 

    <label>Label</label> 
    <input name="val1" value="${val1}" /> 
    ... 
     <!-- submit button here --> 
</form> 

khiển mappend để someUrl.htm sử dụng SimpleUrlHandlerMapping

<bean id="parameterMethodNameResolver" 
     class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver"> <property name="methodParamNames"> 
      ... 
</bean> 

<bean id="handlerMapping" 
     class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">  
     <property name="urlDecode" value="false" /> 
     <property name="mappings"> 
      <props> 
       <prop key="**/someUrl.htm">someController</prop> 
      </props> 
     </property> 
</bean> 

Tôi muốn vượt qua % như val1. Nhưng khi tôi đang làm điều này, các đoạn mã sau đây trả về null:

request.getParameter("val1"); 

catalina.out cho thấy:

Chú ý: Thông số: Character giải mã thất bại. Tham số 'val1' có giá trị '%' đã bị bỏ qua.

Tôi tìm ra rằng chuỗi truy vấn giải mã Spring và request.getQueryString() trả lại val1=% nhưng không trả về val1=%25.

Làm cách nào để ngăn UrlDecoding tại đây?

Đó có phải là lỗi không? Xin lưu ý rằng có thông số urlDecode được đặt thành false.

Bất kỳ ý tưởng nào để khắc phục sự cố, bởi vì tôi thực sự cần phải sử dụng ký tự như %&=.

+0

Bạn đang sử dụng phiên bản Spring nào? – ustun

+0

Phiên bản Spring là 2.0.5. – Sqeezer

+0

Bạn có thể mã hóa các ký tự không? http://www.ietf.org/rfc/rfc2396.txt xác định% as starting en escape sequence, không tuân theo điều này có thể sẽ gây ra vấn đề cho bạn. –

Trả lời

1

Những gì bạn phải làm là không sử dụng bản đồ tham số của Spring. Tạo một bộ lọc sẽ đọc chuỗi truy vấn ở định dạng thô của nó, giải mã nó, lấy các giá trị bạn cần và thêm chúng vào một bean có thể đọc sau khi bạn cần nó. Tôi mơ hồ về việc làm thế nào để làm phần sau vì Spring 2.0.5 là cũ và bất cứ điều gì tôi nói với bạn có thể không hoạt động trong phiên bản đó. Một đối tượng nằm trong phạm vi phiên sẽ ổn.

0

Tôi cũng gặp vấn đề tương tự. Tuy nhiên, tôi có thể tìm mã hóa đúng trong request.getQueryString().

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