需求:Java代码中,需要访问外部接口,并对返回消息进行处理
解决:采用spring集成的RestTemplate。
a.请求报文
b.响应报文
c.主要代码
Map<String, Object> req_data_map = new HashMap<String, Object>();
req_data_map.put("name", "桑科");
req_data_map.put("id_type", "1");
req_data_map.put("id_value", "460311199712190989");
map.put("req_timestamp", df.format(new Date()));
map.put("req_data", req_data_map);
//net.sf.json.JSONObject
JSONObject json = JSONObject.fromObject(map);
try {
HttpHeaders headers = new HttpHeaders();
MediaType type = MediaType.parseMediaType("application/json; charset=UTF-8");
headers.setContentType(type);
headers.add("Accept", MediaType.APPLICATION_JSON.toString());
HttpEntity<JSONObject> formEntity = new HttpEntity<JSONObject>(json, headers);
ResponseEntity<JSONObject> responseEntity = restTemplate.postForEntity(request_url, formEntity, JSONObject.class);
// ResponseEntity<JSONObject> responseEntity = restTemplate.postForEntity(request_url, json, JSONObject.class);
JSONObject body = responseEntity.getBody();
resultCode = body.getString("return_code");
if ((("0").equals(resultCode))) {
JSONObject rsp_data_jo = body.getJSONObject("rsp_data");
}
}catch (Exception e){
log.info("错误原因:" + e.getMessage());
}
d.接口模拟
@RestController
public class RestTemplateController {
@RequestMapping(value="/queryxxx")
public Ztest queryBlacklist(@RequestBody JSONObject jsonObject) {
JSONObject object = jsonObject.getJSONObject("req_data");
}
}
补充一下:
因为项目中用到了原始一点的servlet,所以补充一下Servlet的访问方法,项目名加上servlet-mapping中的url-pattern。