java 从程序内部调用外部url/接口

本人微信 zf363133213 欢迎各位添加好友,共同探讨问题

第一种方法:

public Object test(){

HttpHeaders headers = new HttpHeaders();//http请求头

RestTemplate restTemplate = new RestTemplate();

headers.setContentType(MediaType.parseMediaType("application/json;charset=UTF-8"));

headers.add("versionNo","123");

Map body = new HashMap<>();//请求body

body.put("carNo","123");

HttpEntity> requestEntity=new HttpEntity>(body,headers);

Map map = restTemplate.postForObject("http://test/get",requestEntity,Map.class);

//String jsonStr =restTemplate.postForObject("http://test/get",requestEntity,String.class);

retrurn map;

}

第二种方法:

public Object test(){

Map content =new HashMap();

content.put("carNo","123");//请求参数

HttpClient httpClient = new HttpClient();

PostMethod post = new PostMethod("http://test/get");

post.addRequestHeader("appId","123");

post.addRequestHeader("content-type","application/json;charset=utf-8");

RequestEntity entity =new StringRequestEntity(JSONObject.toJSONString(content),"application/json;charset=utf-8","utf-8");

post.setRequestEntity(entity);

httpclient.executeMethod(post);

String info=new String(post.getResponseBody(),"utf-8");

return info;

}

第三种带token的

@Autowired

private RestTemplate restTemplate;

@Value("${monthRouteUrl}")//在配置文件中配置url

private String url;

定义header方法:

private HttpHeaders createHttpHeaders(String token){

HttpHeaders headers = new HttpHeaders();

//自定义表头

headers.setContentType(new MediaType("application","json",Charset.forName("UTF-8")));

//设置接收

headers.setAccept(Lists.newArrayList(MediaType.APPLICATION_JSON));

headers.setAcceptCharset(Lists.newArrayList(Charset.forName("UTF-8")));

//把token加入header中

headers.add("token",token);

return headers;

}

private Map> getEachDimension( EarlywarningOverviewDTO earlywarning){

//head 调上面方法

HttpHeaders headers = createHttpHeaders(earlywarning.getToken());

restTemplate.getMessageConverters().add(new StringHttpMessageConverter(Charset.forName("UTF-8")));

//封装参数对象和请求头

HttpEntity request = new HttpEntity(earlywarning,hearers);

//调用

ResponseEntity exchange = restTemplate.exchange(url,HttpMethod.POST,requestEntity,String.class);

//得到返回状态

String status = exhange.getStatusCode().toString();

//最终我们想转成的对象集合,具体属性要和写这个接口的人返回的属性一样

List dimensions = Lists.newArrayList();

if("200".contains(status)){

Map map = JSON.parseObject(exchange.getBody(),Map.class);

if(null != map.get("data")){

String data = map.get("data").toString();

//data就是返回的,把他转换为我们需要的对象

dimensions = JSON.parseArray(data,SelectDimensionDTO.class);

}

dimensions  就可以用了

}

第四种 如果不通过他的权限过滤,不要token

则如下:

private MonthlyRouteDTO getMonthRoute(DetailPageDimensionDTO detailPageDimensionDTO ){

//我们想要最终转换的对象,属性要跟这个接口的属性一致

MonthRoutDTO  monthRoutDTO = null;

//直接调工具类方法,参数是url和detailPageDimensionDTO

String result = HttpUtil.requestPost(url,detailPageDimensionDTO );

log.info("-----远程调用:{}----",null== result?null:JSONObject.toJSONString(result));

if(!StringUtils.isEmpty(result)){

Map map = JSON.parseObject(result,Map.class);

String status = (String)map.get("code")

if("1000".equals(status)){

String data = map.get("data").toString();

monthlyRouteDTO = JSON.parseObject(data,MonthlyRouteDTO.class);

}

}

}

//工具类

@Slf4j

public class HttpUtil{

public static String requestPost(String strUrl ,Object content){

  String info = null;

try{

  HttpClient httpclient = new HttpClient();

  PostMethod post  = new PostMethod(strUrl);

  post.addRequestHeader("Content-Type","application/json;charset=utf-8");

RequestEntity entity = new StringRequestEntity(JSONObject.toJSONString(content),"application/json;charset=utf-8","utf-8");

post.setRequestEntity(entity);

httpclient.executeMethod(post);

info = new String(post.getResponseBody(),"utf-8");

return info;

} catch(Exception e){

log.info("-------requestPost异常:{}",e)

}

return "";

}

 

 

你可能感兴趣的:(java 从程序内部调用外部url/接口)