iOS post请求向服务器发送json格式数据(数组或字典)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS post请求向服务器发送json格式数据(数组或字典)相关的知识,希望对你有一定的参考价值。
参考技术A 1.字典(ps usernames 是字段,jsonString是转换json格式的字典)
2.数组
数组其实和字典一样,只需将(dataWithJSONObject: dicFriends )参数,换成数组就可以了
RestTemplate发送数据为JSON的Post请求
目录
零、参考文献
一、写在前面
最近写一个小游戏,需要服务端向匹配端发送Json数据,记录业务端需要向服务端用RestTemplate发送Post请求,且数据为JSON格式时的请求方式
二、问题场景
业务端需要请求服务端的 /player/add
接口,但是 /player/add
接口接收的是 JSON
数据,即接口参数被 @RequestBody
注解修饰。
三、场景重现
业务端代码
请求对象的Url,以本地为例
public interface MatchingConstant
/**
* 匹配系统 添加玩家的 Url
*/
String addPlayerUrl = "http://127.0.0.1:3001/player/add";
/**
* 匹配系统 移除玩家的 Url
*/
String removePlayerUrl = "http://127.0.0.1:3001/player/remove";
websocket请求转发逻辑
@Component
@ServerEndpoint("/websocket/token")
@Slf4j
public class WebSocketServer
private User user;
private void startMatching()
log.info("======> start Matching");
MatchingRequest matchingRequest = new MatchingRequest(this.user.getId(), this.user.getRating());
Map<String, String> requestBody = new HashMap<>();
requestBody.put("userId", String.valueOf(this.user.getId()));
requestBody.put("rating", String.valueOf(this.user.getRating()));
HttpHeaders requestHeaders = new HttpHeaders();
// 重点是配置请求头内容类型为:"application/json"
requestHeaders.setContentType(MediaType.APPLICATION_JSON);
HttpEntity<Map<String, String>> r = new HttpEntity<>(requestBody, requestHeaders);
// 请求服务端添加玩家
String data= restTemplate.postForObject(MatchingConstant.addPlayerUrl, r, String.class);
服务端代码
接收参数的实体类
@Data
@AllArgsConstructor
@NoArgsConstructor // 无参构造用于反序列化
public class MatchingRequest
private int userId;
private int rating;
public MatchingRequest(int userId)
this.userId = userId;
服务端Controller层接口
@RestController
@RequestMapping("/player/")
public class MatchingController
/**
* service 层代码略
*/
@Resource
private MatchingService matchingService;
@PostMapping("/add")
public String addPlayer(@RequestBody MatchingRequest matchingRequest )
return matchingService.addPlayer(matchingRequest);
@PostMapping("/remove")
public String removePlayer(@RequestBody MatchingRequest matchingRequest)
return matchingService.removePlayer(matchingRequest);
其余层代码略
四、总结反思
- 通过RestTemplate发送Post请求,请求体为Json或其他非文本格式,需要更改请求体中
ContentType
- 接收请求的实体类需要无参构造方法,不然无法反序列化,详见:点我跳转
五、写在后面
欢迎关注,实现期间会经常记录一些项目实践中遇到的问题。
欢迎随时留言讨论,与君共勉,知无不答!
以上是关于iOS post请求向服务器发送json格式数据(数组或字典)的主要内容,如果未能解决你的问题,请参考以下文章
使用axios发送post请求,将JSON数据改为为form类型
使用 Volley 发送带有 JSON 数据的 POST 请求