Java中restTemplate的使用
腾讯云 2023-03-25 16:03:40


【资料图】

原文链接

GitHub项目地址

Gitee项目地址

本文介绍restTemplate基础用法。

Java中get和post的用法请参考:Java中Get和Post的使用

1 提供get/post接口

1.1 Controller

@RestController@RequestMapping("/homepage")public class MyController {    @Autowired    MyService myService;    // 提供get接口    @GetMapping("/provideGet")    public Map provideGet(){        return myService.provideGet();    }    // 提供post接口    @PostMapping("/providePost")    public Map providePost(@RequestParam("number") int number, @RequestParam("name") String name) {        return myService.providePost(number, name);    }    // 提供map参数的post接口    @PostMapping("/providePostByMap")    public Map providePostByMap(@RequestParam Map map) {        return myService.providePostByMap(map);    }    // 调用get接口    @GetMapping("/useGet")    public Map useGet() {        return myService.useGet();    }}

1.2 Service

@Service@EnableSchedulingpublic class MyService {    public Map provideGet() {        Map res = new HashMap<>();        res.put("number", "3");        res.put("name", "张三get");        System.out.println("provideGet res:" + res + "\n");        return res;    }    public Map providePost(int number, String name) {        Map res = new HashMap<>();        res.put("number", number);        res.put("name", name);        return res;    }    public Map providePostByMap(Map map) {        int number = map.get("number") == null ? 0 : Integer.parseInt((String) map.get("number"));        String name = map.get("name") == null ? "" : (String) map.get("name");        Map res = new HashMap<>();        res.put("number", number);        res.put("name", name);        System.out.println("providePostByMap res:" + res + "\n");        return res;    }}

2 调用get/post接口

使用restTemplate调用get/post接口。

getForObject():返回值是HTTP协议的响应体getForEntity():返回的是ResponseEntityResponseEntity是对HTTP响应的封装,除了包含响应体,还包含HTTP状态码、contentType、contentLength、Header等信息

2.1 Controller

@RestController@RequestMapping("/homepage")public class MyController {    @Autowired    MyService myService;    // 调用get接口    @GetMapping("/useGet")    public Map useGet() {        return myService.useGet();    }    // 调用get接口验证账号密码    @GetMapping("/useGetByPsw")    public Map useGetByPsw() {        return myService.useGetByPsw();    }    // 调用post接口    @PostMapping("/usePost")    public Map usePost() {        return myService.usePost();    }}

2.2 Service

@Service@EnableSchedulingpublic class MyService {    @Resource    private RestTemplate restTemplate;    String getURL = "http://localhost:8081/homepage/provideGet";    String postURL = "http://localhost:8081/homepage/providePostByMap";    public Map useGet() {        // getForObject返回值是HTTP协议的响应体        String strObject1 = restTemplate.getForObject(getURL, String.class); //无参        JSONObject jsonObject1 = JSONObject.parseObject(strObject1);        MultiValueMap sendData = new LinkedMultiValueMap<>();        sendData.add("number", "3");        sendData.add("name", "张三post");        String strObject2 = restTemplate.getForObject(getURL, String.class, sendData); // 带参        JSONObject jsonObject2 = JSONObject.parseObject(strObject2);        // getForEntity返回的是ResponseEntity,是对HTTP响应的封装        ResponseEntity responseData = restTemplate.getForEntity(getURL, ResponseResult.class);        Map returnData = new HashMap<>();        returnData.put("StatusCode:", responseData.getStatusCode());        returnData.put("Body:", responseData.getBody());        System.out.println("useGet jsonObject1:" + jsonObject1 + "\n");        System.out.println("useGet jsonObject2:" + jsonObject2 + "\n");        System.out.println("useGet responseData:" + responseData + "\n");        System.out.println("useGet returnData:" + returnData + "\n");        return returnData;    }    public Map useGetByPsw() {        RestTemplateBuilder builder = new RestTemplateBuilder();        RestTemplate restTemplate = builder.basicAuthentication("username", "password").build();        // getForEntity返回的是ResponseEntity,是对HTTP响应的封装        ResponseEntity responseData = restTemplate.getForEntity(getURL, ResponseResult.class);        Map returnData = new HashMap<>();        returnData.put("StatusCode:", responseData.getStatusCode());        returnData.put("Body:", responseData.getBody());        System.out.println("useGetByPsw returnData:" + responseData + "\n");        System.out.println("useGetByPsw returnData:" + returnData + "\n");        return returnData;    }    public Map usePost() {        //RestTemplate在postForObject时,用MultiValueMap,不可使用HashMap。        MultiValueMap sendData = new LinkedMultiValueMap<>();        sendData.add("number", "3");        sendData.add("name", "张三post");        // getForObject返回值是HTTP协议的响应体        String strObject = restTemplate.postForObject(postURL, sendData, String.class);        JSONObject jsonObject = JSONObject.parseObject(strObject);        // getForEntity返回的是ResponseEntity,是对HTTP响应的封装        ResponseEntity responseData = restTemplate.postForEntity(postURL, sendData, ResponseResult.class);        Map returnData = new HashMap<>();        returnData.put("StatusCode:", responseData.getStatusCode());        returnData.put("Body:", responseData.getBody());        System.out.println("usePost jsonObject:" + jsonObject + "\n");        System.out.println("usePost responseData:" + responseData + "\n");        System.out.println("usePost returnData:" + returnData + "\n");        return returnData;    }}

猜你喜欢

Java中restTemplate的使用

2023-03-25

世界微速讯:3月22日首秀 腾势第三款车型定名“N8”

2023-03-25

新车品鉴:2021上海车展:大狗2.0T新车型上市

2023-03-25

aptamil是什么牌子的奶粉

2023-03-25

每日关注!2-0,世界冠军队又赢,狂射24脚,足坛迎新纪录:梅西仅排第4

2023-03-25

万向钱潮03月24日被深股通减持122.87万股

2023-03-25

环球观天下!《卧龙苍天陨落》高效刷弩赐福介绍[多图]

2023-03-25

南京江宁高新区召开生物医药产业高质量发展促进会 兑现政策奖励超5000万元

2023-03-24

全球速读:卫生间消毒方法有哪些

2023-03-24

涛涛车业:公司场地电动车产品尚未应用于杭州亚运会

2023-03-24

晚秋_对于晚秋简单介绍_世界新要闻

2023-03-24

《晚霞映初心》摄影展开幕,上海市老干部大学摄影学友会展示学习成果_每日快看

2023-03-24

追踪“106”借贷短信:信息贩卖“黑产”隐现

2023-03-24

环球消息!中国警方自俄罗斯成功引渡1名杀人犯罪嫌疑人

2023-03-24

重磅发布!事关6G!

2023-03-24

热门推荐