Java中restTemplate的使用

2023-03-25 23:23:45    来源:腾讯云


(资料图片仅供参考)

原文链接

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;    }}

关键词:

  • 微视频 | 命运与共

    我们只有一个地球,这是各国人民共同的家园。让我们坚定信心,携手应对全球性威胁和挑战,推动构建人类命运共同体,共同建设更加美好的世界!

    来源:三秦网      时间:2023-03
  • 【环球热闻】网曝孔令辉执教日本!或威胁国乒?刘国梁不用担心,大概率是谣言

    此外网曝的消息称日本乒协开出了2000万日元的年薪,换算成人民币就是100万,很显然这个价格恐怕请不到孔令辉,要知道孔令辉凭借自己的名气出去

    来源:小李子爱体育      时间:2023-03
  • 安然版温柔的谎言剧情介绍 天天新消息

    安然版《温柔的谎言》剧情以原本幸福的一家三口却因为妻子的出轨而发生巨变为主线,讲述了某海滨城市里三名女人与男人之间的故事。北方的某个

    来源:万年历      时间:2023-03
  • 世界新资讯:振北社区居委会

    1、振北社区居委会是1998年8月由原来的青岛钢丝绳厂家委转变而来。当时的地域东起永平路西至沧口广场的正定路,南起振

    来源:互联网      时间:2023-03

X 关闭

X 关闭