3

SpringMVCパターンに問題があります。エンコードされた値を使用してiPhoneアプリからWebサービスを呼び出すと、デコードが正しく行われていません。問題が何であるかわからない。+記号はスペース""に置き換えられます。以下は私のweb.xmlです

<?xml version="1.0" encoding="UTF-8"?><br>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"<br>
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"<br>
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"<br>
id="WebApp_ID" version="3.0"><br>
<display-name>APPLICATIONNAME</display-name><br>
<filter><br>
<filter-name>encoding-filter</filter-name><br>
<filter-class>org.springframework.web.filter.CharacterEnco dingFilter</filter-class><br>
<init-param><br>
<param-name>encoding</param-name><br>
<param-value>UTF-8</param-value><br>
</init-param><br>
<init-param><br>
<param-name>forceEncoding</param-name><br>
<param-value>true</param-value><br>
</init-param><br>
</filter><br>
<filter-mapping><br>
<filter-name>encoding-filter</filter-name><br>
<url-pattern>/rest/*</url-pattern><br>
</filter-mapping><br>
<servlet><br>
<servlet-name>spring</servlet-name><br>
<servlet-class>org.springframework.web.servlet.DispatcherSe rvlet</servlet-class><br>
<load-on-startup>1</load-on-startup><br>
</servlet><br>
<servlet-mapping><br>
<servlet-name>spring</servlet-name><br>
<url-pattern>/rest/*</url-pattern><br>
</servlet-mapping><br>
<welcome-file-list><br>
<welcome-file>index.jsp</welcome-file><br>
</welcome-file-list><br>
</web-app><br>

私のコントローラークラス

@Controller
public class LoginController {

@Autowired
private LoginServiceImpl loginService;

@RequestMapping(value = "/getUserDetails", method = RequestMethod.POST)
public @ResponseBody
LoginData getUserDetails(@ModelAttribute LoginDetails loginDetails) {
LOGGER.debug("Session ID = " + loginDetails.getSessionID());
}

iPhoneAPPからのサンプル入力リクエスト

NSURLResponse *response = nil;
NSError *error = nil;
NSString *urlString = @"http://localhost:8080/rest/getUserDetails";
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *urlRequest = [NSMutableURLRequest requestWithURL:url];
NSURLConnection *connection= [[NSURLConnection alloc] initWithRequest:urlRequest
                                                             delegate:self];
[urlRequest setHTTPMethod:@"POST"];
NSString *postString = [NSString stringWithFormat:@"sessionID=%@",@"ABCD+/EFGH"];
NSData *a=[postString dataUsingEncoding:NSUTF8StringEncoding];
NSLog(@"encoded %@",a);
[urlRequest setHTTPBody:a];
    [connection start];
NSString *returnString = [[NSString alloc] initWithData:[NSURLConnection sendSynchronousRequest:urlRequest returningResponse:&response error:&error] encoding:NSUTF8StringEncoding];

NSLog(@" %@ ",returnString);
NSLog(@"%@",error);

「ABCD+/ EFGH」の代わりにサーバー側で、「ABCD/EFGH」を取得しています。したがって、プラス(+)はデコードされません。サーバーでプラス(+)を取得するには、何をする必要がありますか?どんな助けでも大歓迎です。

4

1 に答える 1

1

これは予期される動作です。

application/x-www-form-urlencodedフォーム(POST でフォーム データを送信するために使用) では、スペースは としてエンコードされ、+実数+はパーセント エンコード形式 ( %2B) で表す必要があります。

application/x-www-form-urlencoded手動で置き換えるのではなく、iPhone で利用可能な場合は、何らかの組み込みのエンコード ルーチンを使用する方がよいと思います。

于 2012-12-05T09:05:15.140 に答える