一、使用原生jdk带的
HttpURLConnection
访问参数通过io流,麻烦的不行,写了一大堆,参数传输稀烂。(折腾半天有人说用RestTemplate啊,真可谓书到用时方恨少)
二、Spring RestTemplate
需要的包
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>4.3.13.RELEASE</version>
</dependency>
废话不多说,测试时,客户端
private static RestTemplate restTemplate=new RestTemplate();
1、get请求
服务端代码
@ResponseBody
@GetMapping("/hello")
String hehe1(String name,String age){
System.out.println("dasdas"+name+age);
return "我是get请求";
}
客户端:
//get访问
public static String getHello() {
ResponseEntity<String> responseEntity = restTemplate.getForEntity("http://localhost:8080/hello?name={1}&age={2}", String.class,"zhangsan","23");
String body = responseEntity.getBody();
HttpStatus statusCode = responseEntity.getStatusCode();
int statusCodeValue = responseEntity.getStatusCodeValue();
HttpHeaders headers = responseEntity.getHeaders();
StringBuffer result = new StringBuffer();
System.out.println(responseEntity.getBody());
System.out.println(responseEntity.getStatusCode());
System.out.println(responseEntity.getStatusCodeValue());
System.out.println(responseEntity.getHeaders());
return "";
}
运行结果:
2、post
post传递参数直接用map是报错的,原因后面补充。
所以我这里通过用json传输
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.60</version>
</dependency>
服务端代码:
@ResponseBody
@PostMapping("/post")
String hehe2(@RequestBody String nameage){
JSONObject object = JSONObject.parseObject(nameage);
System.out.println(object.get("name"));
return (String)object.get("name");
}
客户端代码:
public static void book3() {
restTemplate.getMessageConverters().set(1, new StringHttpMessageConverter(StandardCharsets.UTF_8));
JSONObject object = new JSONObject();
object.put("name","张三");
object.put("age",5);
String nameage=object.toJSONString();
System.out.println(nameage) ;
ResponseEntity<String> responseEntity = restTemplate.postForEntity("http://localhost:8080/post", nameage,String.class);
System.out.println(responseEntity.getBody()) ;
}
运行结果:
3、上传文件
服务端:
@ResponseBody
@PostMapping("/filetest")
String hehe3(@RequestParam(value = "file", required = false) MultipartFile file,@RequestParam(value = "pass", required = false) String pass){
File fileserver=new File("H:/abc.png");
try {
file.transferTo(fileserver);
} catch (IOException e) {
e.printStackTrace();
}
System.out.println(pass);
return "成功";
}
客户端:
public static void book4(){
// 上传文件
FileSystemResource fileSystemResource = new FileSystemResource("H:/123.png");
if (!fileSystemResource.exists()) {//文件不存在处理
System.out.println("文件不存在");
}
MediaType type = MediaType.parseMediaType("multipart/form-data");
HttpHeaders headers = new HttpHeaders();
headers.setContentType(type);
//headers.set("Cookie", cookies);//session用于验证身份
MultiValueMap<String, Object> form = new LinkedMultiValueMap<String, Object>();
form.add("file", fileSystemResource);
form.add("pass", "123");//用于验证身份
HttpEntity<MultiValueMap<String, Object>> files = new HttpEntity<>(form, headers);
ResponseEntity<String>responseEntity = restTemplate.postForEntity("http://localhost:8080/filetest", files, String.class);//发送
//此处要添加错误处理
String result = responseEntity.getBody().toString();
}
结果:
待续
参考:https://blog.csdn.net/u012702547/article/details/77917939