java发送请求访问接口(传递数据及上传文件)

一、使用原生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

  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值