赞
踩
最近写一个小游戏,需要服务端向匹配端发送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); } }
其余层代码略
ContentType
欢迎关注,实现期间会经常记录一些项目实践中遇到的问题。
欢迎随时留言讨论,与君共勉,知无不答!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。