iphone - spring mvc解码 + 正在被替换为空格

标签 iphone rest spring-mvc

我在 Spring MVC 模式中遇到问题。当我使用编码值从 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 类

@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());
}

来自 iPhone 应用程序的示例输入请求

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”。所以加号 (+) 没有被解码。 需要做什么才能在服务器上获得加号 (+)?任何帮助表示赞赏。

最佳答案

这是预期的行为。

application/x-www-form-urlencoded form (用于在POST中发送表单数据)空格被编码为+,真正的+应该以百分比编码的形式表示(%2B )。

我认为最好使用某种内置 application/x-www-form-urlencoded 编码例程(如果 iPhone 上可用),而不是手动替换。

关于iphone - spring mvc解码 + 正在被替换为空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13718995/

相关文章:

rest - 如何将某些功能分组到特定线程中并在 KarateDSL 中并行运行

json - Excel VBA 创建 json 有效负载

java - 在javascript中使用json对象在确认窗口中显示

java - Spring boot @ExceptionHandler 未到达

ios - 设置中的辅助功能大文本

ios - 如何为 sprite kit 实现触摸和按住?

ios - 在代码生成的 UIView 上绘制 UIBezierPath

iphone - 日期格式问题 - 将字符串转换为 MMM d、yyyy 格式的日期

json - 错误 : Type '_InternalLinkedHashMap<String, dynamic>' is not a subtype of type 'List<dynamic>' in type cast

java - 提交表单时无法将类型 'java.lang.String' 的值转换为所需类型 'java.lang.Long' 错误