国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

SpringBoot中的RestTemplate使用筆記

這篇具有很好參考價值的文章主要介紹了SpringBoot中的RestTemplate使用筆記。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

SpringBoot中的RestTemplate使用筆記

為了方便使用,這里我封裝成一個工具類來靜態(tài)調(diào)用RestTemplate

以下代碼是基于SpringBoot2.4.2版本寫的案例

需要配置的application.yml如下文章來源地址http://www.zghlxwxcb.cn/news/detail-605787.html

server:
  port: 7024
  servlet:
    context-path: /demo
    session:
      timeout: 30m  #默認會話過期時間30分鐘
    encoding:
      enabled: true
      charset: UTF-8
      force: true
  tomcat:
    uri-encoding: UTF-8

spring:
  servlet:
    multipart:
      max-file-size: 50MB  #單個文件的最大上限
      max-request-size: 200MB  #單個請求的文件總大小限制
      location: ${user.home}/.${spring.application.name}/tempDir
  application:
    name: demo
  jackson:
    time-zone: GMT+8
    date-format: yyyy-MM-dd HH:mm:ss
logging:
  file:
    #最終的存儲路徑是:  系統(tǒng)用戶目錄/.應用名稱/logs/端口號/spring.log
    path: ${user.home}/.${spring.application.name}/logs/${server.port}
  logback:
    rollingpolicy:
      max-file-size: 1MB
      max-history: 7
  pattern:
    console: "%date  %clr(%level) [${PID}]  [%thread] [%magenta(%X{traceId})] %cyan(%logger{10}) [%file : %line] %msg%n"
    file: "%date %level [${PID}]   [%thread] [%X{traceId}] %logger{10} [%file : %line] %msg%n"

RestTemplateUtil工具類

package cn.test.util;

import lombok.extern.slf4j.Slf4j;
import org.springframework.core.io.FileSystemResource;
import org.springframework.http.*;
import org.springframework.http.client.ClientHttpRequestInterceptor;
import org.springframework.http.client.SimpleClientHttpRequestFactory;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestTemplate;

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Slf4j
public class RestTemplateUtil {
    public RestTemplateUtil() {
    }

    private static RestTemplate template;

    static {
        SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
        //http 讀超時5s
        factory.setReadTimeout(5000);
        //http 連接超時5s
        factory.setConnectTimeout(5000);
        template = new RestTemplate(factory);
        List<ClientHttpRequestInterceptor> interceptorList = new ArrayList<>();
        interceptorList.add(new RestTemplateLogging());
        template.setInterceptors(interceptorList);
    }

    /**
     * get請求-無參數(shù)
     *
     * @param url          請求url,如http://localhost:7024/demo/lic/getCheckInfo
     * @param responseType 返回類型 如String.class/ Map.class /Resp.class /Result.class
     * @return T 返回對象 如String/ Map /Resp/Result
     * <p>
     * 例:
     * String s = RestTemplateUtil.doHttpGet(
     * "http://localhost:7024/demo/lic/getCheckInfo",
     * String.class);
     */
    public static <T> T doSimpleHttpGet(String url, Class<T> responseType, Map<String, String> reqHeaderMap) {
        return doGetHttp(url, responseType, new HashMap<>(), reqHeaderMap);
    }

    /**
     * get請求-可替換參數(shù)url
     *
     * @param replaceUrl   可替換參數(shù)url 如http://localhost:7024/demo/t2/{v1}/{v2}
     * @param responseType 返回類型 如String.class/ Map.class /Resp.class /Result.class
     * @param urlPathVars  要替換的參數(shù)項 ,類型可以是字符串或數(shù)字
     * @return T 返回對象 如String/ Map /Resp/Result
     * <p>
     * 例:
     * Map s1 = RestTemplateUtil.doGetHttpPathVar(
     * "http://localhost:7024/demo/t2/{v1}/{v2}",
     * Map.class,
     * "v1wer", "v2r23r");
     */
    public static <T> T doGetHttpPathVar(String replaceUrl,
                                         Class<T> responseType,
                                         Object... urlPathVars) {
        return template.getForObject(replaceUrl, responseType, urlPathVars);
    }

    /**
     * get請求-url為QueryString形式
     *
     * @param qsUrl          請求url,如 http://localhost:7024/demo/t3?a={a}&b=
     * @param responseType   返回類型 如String.class/ Map.class /Resp.class /Result.class
     * @param queryStringMap {a=e12, b=r23r}
     * @return T 返回對象 如String/ Map /Resp/Result
     */
    public static <T> T doGetHttpQueryString(String qsUrl,
                                             Class<T> responseType,
                                             Map<String, String> queryStringMap,
                                             Map<String, String> reqHeaderMap) {
        if (queryStringMap == null) {
            queryStringMap = new HashMap<>();
        }
        return doGetHttp(qsUrl, responseType, queryStringMap, reqHeaderMap);
    }


    private static <T> T doGetHttp(String qsUrl,
                                   Class<T> responseType,
                                   Map<String, String> queryStringMap,
                                   Map<String, String> reqHeaderMap) {
        HttpHeaders httpHeaders = new HttpHeaders();
        if (reqHeaderMap != null && !reqHeaderMap.isEmpty()) {
            for (String s : reqHeaderMap.keySet()) {
                httpHeaders.add(s, reqHeaderMap.get(s));
            }
        }
        HttpEntity<String> httpEntity = new HttpEntity<>(null, httpHeaders);
        ResponseEntity<T> tResponseEntity = template.exchange(
                qsUrl,
                HttpMethod.GET,
                httpEntity,
                responseType,
                queryStringMap);
        return tResponseEntity.getBody();
    }

    /**
     * post-body-json 形式的請求
     *
     * @param url          請求url,如 http://localhost:7024/demo/t5
     * @param responseType 返回類型 如String.class/ Map.class /Resp.class /Result.class
     * @param reqJson      json字符串 如: {"macAddress":"8C:EC:4B:55:0E:EC","version":"v2123rt"}
     * @param reqHeaderMap 可選的請求頭
     * @return T 返回對象 如String/ Map /Resp/Result
     */
    public static <T> T doPostHttpJsonBody(String url,
                                           Class<T> responseType,
                                           String reqJson,
                                           Map<String, String> reqHeaderMap) {
        HttpHeaders httpHeaders = new HttpHeaders();
        httpHeaders.setContentType(MediaType.APPLICATION_JSON);
        if (reqHeaderMap != null && !reqHeaderMap.isEmpty()) {
            for (String s : reqHeaderMap.keySet()) {
                httpHeaders.add(s, reqHeaderMap.get(s));
            }
        }
        HttpEntity<String> httpEntity = new HttpEntity<>(reqJson, httpHeaders);
        return template.postForObject(url, httpEntity, responseType);
    }

    /**
     * post-formData 形式的請求
     *
     * @param url          請求url,如 http://localhost:7024/demo/t4
     * @param responseType 返回類型 如String.class/ Map.class /Resp.class /Result.class
     * @param formDataMap  {a=e12, b=r23r,c=123,d=true}
     * @param reqHeaderMap 可選的請求頭
     * @return T 返回對象 如String/ Map /Resp/Result
     */
    public static <T> T doPostHttpFormData(String url,
                                           Class<T> responseType,
                                           Map<String, Object> formDataMap,
                                           Map<String, String> reqHeaderMap) {
        HttpHeaders httpHeaders = new HttpHeaders();
        httpHeaders.setContentType(MediaType.MULTIPART_FORM_DATA);

        //可選的請求頭
        if (reqHeaderMap != null && !reqHeaderMap.isEmpty()) {
            for (String s : reqHeaderMap.keySet()) {
                httpHeaders.add(s, reqHeaderMap.get(s));
            }
        }
        //構(gòu)建填充formData
        MultiValueMap<String, Object> formDataParam = new LinkedMultiValueMap<>();
        if (formDataMap != null && !formDataMap.isEmpty()) {
            for (String key : formDataMap.keySet()) {
                formDataParam.add(key, formDataMap.get(key));
            }
        }
        HttpEntity<MultiValueMap<String, Object>> httpEntity =
                new HttpEntity<>(formDataParam, httpHeaders);

        return template.postForObject(url, httpEntity, responseType);
    }


    /**
     * post-上傳MultipartFile文件
     *
     * @param url          請求url,如 http://localhost:7024/demo/t6
     * @param responseType 返回類型 如String.class/ Map.class /Resp.class /Result.class
     * @param file         java File 對象
     * @param reqHeaderMap 可選的請求頭
     * @return T 返回對象 如String/ Map /Resp/Result
     */
    public static <T> T doPostHttpUploadFile(String url,
                                             Class<T> responseType,
                                             File file,
                                             Map<String, String> reqHeaderMap) {
        Map<String, Object> formDataMap = new HashMap<>();
        //支持傳輸 MultipartFile
        formDataMap.put("file", new FileSystemResource(file));
        return doPostHttpFormData(url, responseType, formDataMap, reqHeaderMap);
    }


    /**
     * post-body-binary 二進制流 上傳
     * @param url 請求url,如 http://localhost:7024/demo/t62
     * @param responseType  返回類型 如String.class/ Map.class /Resp.class /Result.class
     * @param file java File 對象
     * @return T 返回對象 如String/ Map /Resp/Result
     * @throws IOException
     */
    public static <T> T doPostHttpBinaryStream(String url,
                                               Class<T> responseType,
                                               File file) throws IOException {
        HttpHeaders httpHeaders = new HttpHeaders();
        //固定請求頭
        httpHeaders.setContentType(MediaType.APPLICATION_OCTET_STREAM);
        httpHeaders.add("Content-Disposition", file.getName());

        //file轉(zhuǎn)byte[] 字節(jié)流
        String absolutePath = file.getAbsolutePath();
        Path path = Paths.get(absolutePath);
        byte[] bytes = Files.readAllBytes(path);
        HttpEntity<byte[]> httpEntity = new HttpEntity<>(bytes, httpHeaders);
        return template.postForObject(url, httpEntity, responseType);
    }


    /**
     * put請求,常用于 更新(修改)已存在的數(shù)據(jù)
     *
     * @param url          請求url,如 http://localhost:7024/demo/t7
     * @param responseType 返回類型 如String.class/ Map.class /Resp.class /Result.class
     * @param reqJson      實際開發(fā)中put請求一般傳json參數(shù),json里要有唯一鍵如id
     * @return T 返回對象 如String/ Map /Resp/Result
     */
    public static <T> T doSimplePutJson(String url,
                                        Class<T> responseType,
                                        String reqJson) {
        return doPutJsonHttp(url, responseType, reqJson, null);
    }


    public static <T> T doPutJsonHttp(String url,
                                      Class<T> responseType,
                                      String reqJson,
                                      Map<String, String> reqHeaderMap) {
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_JSON);
        if (reqHeaderMap != null && !reqHeaderMap.isEmpty()) {
            for (String s : reqHeaderMap.keySet()) {
                headers.add(s, reqHeaderMap.get(s));
            }
        }
        ResponseEntity<T> tResponseEntity = template.exchange(
                url,
                HttpMethod.PUT,
                new HttpEntity<>(reqJson, headers),
                responseType,
                new HashMap<>());
        return tResponseEntity.getBody();
    }


    /**
     * DELETE--單個刪除請求
     *
     * @param url           可替換參數(shù)url 如http://localhost:7024/demo/t8/{id}
     * @param oneUrlPathVar 對應id值
     */
    public static void doDeleteHttpOnePathVar(String url, Object oneUrlPathVar) {
        template.delete(url, oneUrlPathVar);
    }

    /**
     * DELETE--動態(tài)條件刪除請求
     *
     * @param url            請求url,如 http://localhost:7024/demo/t9?a={a}&b=
     * @param queryStringMap {a=e12, b=r23r}
     */
    public static void doDeleteWhereHttp(String url, Map<String, String> queryStringMap) {
        template.delete(url, queryStringMap);
    }


    /**
     * DELETE--批量刪除請求
     *
     * @param url          請求url,如 http://localhost:7024/demo/t10
     * @param responseType 返回類型 如String.class/ Map.class /Resp.class /Result.class
     * @param reqJson      傳json參數(shù),json里要有唯一鍵數(shù)組如 {"ids":[1,2,3],"remark":"r23r","ts":1351311410}
     * @param reqHeaderMap 可選的請求頭
     * @return T 返回對象 如String/ Map /Resp/Result
     */
    public static <T> T doDeleteBatchByJson(String url,
                                            Class<T> responseType,
                                            String reqJson,
                                            Map<String, String> reqHeaderMap) {
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_JSON);
        if (reqHeaderMap != null && !reqHeaderMap.isEmpty()) {
            for (String s : reqHeaderMap.keySet()) {
                headers.add(s, reqHeaderMap.get(s));
            }
        }
        ResponseEntity<T> exchange = template.exchange(
                url,
                HttpMethod.DELETE,
                new HttpEntity<>(reqJson, headers),
                responseType,
                new HashMap<>());
        return exchange.getBody();
    }


}


restTemplate日志攔截器

package cn.test.util;

import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpRequest;
import org.springframework.http.MediaType;
import org.springframework.http.client.ClientHttpRequestExecution;
import org.springframework.http.client.ClientHttpRequestInterceptor;
import org.springframework.http.client.ClientHttpResponse;

import java.io.IOException;
import java.nio.charset.StandardCharsets;

@Slf4j
public class RestTemplateLogging implements ClientHttpRequestInterceptor {

    @Override
    public ClientHttpResponse intercept(HttpRequest request,
                                        byte[] body,
                                        ClientHttpRequestExecution execution) throws IOException {
        log.info("req method:{},url:{}", request.getMethod(),request.getURI());
        log.info("req headers:{}", request.getHeaders());
        if (MediaType.APPLICATION_JSON.equals(request.getHeaders().getContentType())) {
            log.info("req body:{}", new String(body, StandardCharsets.UTF_8));
        }

        ClientHttpResponse response = execution.execute(request, body);
        log.info("resp statCode:{}", response.getStatusCode());
        log.info("resp headers:{}", response.getHeaders());

        return response;
    }
}

測試效果

定義一些API接口

package cn.test.web;

import cn.hutool.core.io.IoUtil;
import cn.test.lic.bean.CheckInfo;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

@RestController
public class TestController {

    /**
     * 含請求頭參數(shù)的url ,必須用@RequestHeader 接收請求頭
     *
     * @param upk
     * @return
     */
    @GetMapping("/t1")
    public String t1(@RequestHeader("upk") String upk) {
        System.err.println(upk);
        return "ewr21r12r";
    }


    /**
     * url路徑變量 形式的http請求,必須用@PathVariable接收
     *
     * @param v1
     * @param v2
     * @return
     */
    @GetMapping("/t2/{v1}/{v2}")
    public TestResp t2(@PathVariable("v1") String v1,
                       @PathVariable("v2") String v2) {
        TestResp build = TestResp.builder()
                .v1(v1)
                .v2(v2)
                .build();
        //{"v1":"re","v2":"r23r"}
        return build;
    }

    /**
     * queryString形式的get查詢
     * http://localhost:7024/demo/t3?a=e12&b=r23r
     *
     * @param a
     * @param b
     * @return
     */
    @GetMapping("/t3")
    public TestResp t3(@RequestParam String a,
                       @RequestParam String b) {
        TestResp build = TestResp.builder()
                .v1(a)
                .v2(b)
                .build();
        return build;
    }


    /**
     * post-formData 形式的請求
     *
     * @param a post-form參數(shù)
     * @param b post-form參數(shù)
     * @return
     */
    @PostMapping("/t4")
    public TestResp t4(@RequestParam String a,
                       @RequestParam String b,
                       int c,
                       boolean d) {
        TestResp build = TestResp.builder()
                .v1(a)
                .v2(b).c(c).d(d)
                .build();
        return build;
    }


    /**
     * post-body-json 形式的請求
     *
     * @param checkInfo post-body-json參數(shù)
     * @return
     */
    @PostMapping("/t5")
    public CheckInfo t5(@RequestBody CheckInfo checkInfo) {
        return checkInfo;
    }


    /**
     * 文件上傳------MultipartFile方式,本質(zhì)還是formData 形式的請求
     *
     * @param file
     * @param upk
     * @return
     * @throws IOException
     */
    @PostMapping("/t6")
    public String t6(@RequestPart("file") MultipartFile file,
                     @RequestHeader("upk") String upk) throws IOException {
        System.out.println("upk:" + upk);
        if (!file.isEmpty()) {
            System.out.println(file.getName());
            System.out.println(file.getOriginalFilename());
            File file1 = new File("D:\\test7025\\" + file.getOriginalFilename());
            file1.delete();
            file.transferTo(file1);
        }
        return "ok!";
    }


    /**
     * post-body-binary 二進制流 上傳 ,需要請求方聲明固定的ContentType=application/octet-stream
     *
     * @param request
     * @param name
     * @return
     * @throws Exception
     */
    @PostMapping("/t62")
    public TestResp t62(HttpServletRequest request,
                        @RequestHeader("Content-Disposition") String name) throws Exception {
        System.out.println(name);
        ServletInputStream inputStream = request.getInputStream();
        File file1 = new File("D:\\test7025\\" + name);
        if (!file1.exists()) {
            file1.createNewFile();
        }
        FileOutputStream fos = new FileOutputStream(file1);
        IoUtil.copy(inputStream, fos);
        IoUtil.closeIfPosible(inputStream);
        IoUtil.closeIfPosible(fos);

        TestResp build = TestResp.builder()
                .v1("f3rtf23t")
                .v2("bsft23gf3g2")
                .build();

        return build;
    }


    /**
     * put +傳json 的請求, 常用于修改某個數(shù)據(jù)
     *
     * @param req TestReq ,一般要規(guī)定json里的唯一鍵必填,如id
     * @return TestReq
     */
    @PutMapping("/t7")
    public TestReq t7(@RequestBody @Validated TestReq req) {
        System.out.println(req);
        return req;
    }

    /**
     * Delete請求
     * restful形式 刪除單條數(shù)據(jù),一般傳數(shù)字id
     *
     * @param id
     */
    @DeleteMapping("/t8/{id}")
    public void t8(@PathVariable("id") Long id) {
        System.err.println(id);
    }

    /**
     * Delete請求
     * 按多個條件刪除數(shù)據(jù),條件一般要必填
     *
     * @param a
     * @param b
     */
    @DeleteMapping("/t9")
    public void t9(@RequestParam String a,
                   @RequestParam String b) {
        System.err.println(a);
        System.err.println(b);
    }

    /**
     * Delete請求
     * 批量刪除數(shù)據(jù),一般至少要提供ids數(shù)組
     *
     * @param req json里ids數(shù)組必填
     * @return
     */
    @DeleteMapping("/t10")
    public Test2Req t10(@RequestBody Test2Req req) {
        System.err.println(req);
        return req;
    }

}


package cn.test.web;

import lombok.Data;

@Data
public class Test2Req {
    private Long[] ids;
    private String remark;
}

package cn.test.web;

import lombok.Data;

import javax.validation.constraints.NotNull;

@Data
public class TestReq {
    @NotNull
    private Long id;
    private String name;
    private String remark;
}

package cn.test.web;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class TestResp {
    private String v1;
    private String v2;

    private int c;
    private boolean d;
}

測試使用RestTemplateUtil

package cn.test;

import cn.hutool.core.convert.Convert;
import cn.hutool.core.map.MapUtil;
import cn.test.lic.api.CheckInfoResp;
import cn.test.lic.api.ResultVO;
import cn.test.util.JacksonUtil;
import cn.test.util.RestTemplateUtil;
import cn.test.web.Test2Req;
import cn.test.web.TestReq;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

@Slf4j
@SpringBootTest
public class LicClientDemoAppTests {

    @Test
    void test1() throws IOException {
        HashMap<String, String> reqHeaderMap = new HashMap<>();
        reqHeaderMap.put("upk","ryju56u");
        System.err.println("----=-=-=--------------===");


        String s = RestTemplateUtil.doSimpleHttpGet(
                "http://localhost:7024/demo/t1",
                String.class,reqHeaderMap);
        System.out.println(s);

        System.err.println("----=-=-=--------------===");


        ResultVO resultVO = RestTemplateUtil.doSimpleHttpGet(
                "http://localhost:7024/demo/lic/getCheckInfo",
                ResultVO.class,reqHeaderMap);
        CheckInfoResp content = Convert.convert(CheckInfoResp.class,resultVO.getContent());
        System.out.println(content);
        System.err.println("----=-=-=--------------===");


        Map s1 = RestTemplateUtil.doGetHttpPathVar(
                "http://localhost:7024/demo/t2/{v1}/{v2}",
                Map.class,
                "v1wer", "v2r23r");
        System.out.println(s1);

        System.err.println("----=-=-=--------------===");


        HashMap<String, String> sspMap = new HashMap<>();
        sspMap.put("a","r23r");
        sspMap.put("b","wer23r");
        String m1 = RestTemplateUtil.doGetHttpQueryString(
                "http://localhost:7024/demo/t3?a={a}&b=",
                String.class,
                sspMap,reqHeaderMap);
        System.out.println(m1);

        System.err.println("----=-=-=--------------===");


        HashMap<String, Object> reqMap = new HashMap<>();
        reqMap.put("version","v2123rt");
        reqMap.put("macAddress","8C:EC:4B:55:0E:EC");
        String json = JacksonUtil.obj2String(reqMap);
        String t = RestTemplateUtil.doPostHttpJsonBody(
                "http://localhost:7024/demo/t5",
                String.class, json,null);
        System.out.println(t);

        System.err.println("----=-=-=--------------===");

        HashMap<String, Object> formDataReq = new HashMap<>();
        formDataReq.put("a","v2123rt");
        formDataReq.put("b","8C:EC:4B:55:0E:EC");
        formDataReq.put("c",123);
        formDataReq.put("d",true);
        String s2 = RestTemplateUtil.doPostHttpFormData(
                "http://localhost:7024/demo/t4",
                String.class,
                formDataReq, null);
        System.out.println(s2);

        System.err.println("----=-=-=--------------===");



        //formData文件上傳
        String s3 = RestTemplateUtil.doPostHttpUploadFile(
                "http://localhost:7024/demo/t6",
                String.class,
                new File("E:\\lay2023\\vitevue2023-know-wiki-frontend.rar"),
                reqHeaderMap);
        System.out.println(s3);

        System.err.println("----=-=-=--------------===");

        //body-binary二進制流上傳
        String s325 = RestTemplateUtil.doPostHttpBinaryStream(
                "http://localhost:7024/demo/t62",
                String.class,
                new File("E:\\lay2023\\vitevue2023-know-wiki-frontend.rar")
                );
        System.err.println(s325);

        System.err.println("----=-=-=--------------===");

        TestReq req = new TestReq();
        req.setId(123L);
        req.setName("ert23t");
        req.setRemark("dhg3t4te");
        String s4 = RestTemplateUtil.doSimplePutJson("http://localhost:7024/demo/t7",
                String.class, JacksonUtil.obj2String(req));
        System.err.println(s4);

        System.err.println("----=-=-=--------------===");

        RestTemplateUtil.doDeleteHttpOnePathVar(
                "http://localhost:7024/demo/t8/{id}",
                321);

        System.err.println("----=-=-=--------------===");


        RestTemplateUtil.doDeleteWhereHttp(
                "http://localhost:7024/demo/t9?a={a}&b=",
                sspMap);
        System.err.println("----=-=-=--------------===");

        Test2Req req2 = new Test2Req();
        Long[] ids = {321L,341L};
        req2.setIds(ids);
        req2.setRemark("dhg3t4te");
        String s5 = RestTemplateUtil.doDeleteBatchByJson(
                "http://localhost:7024/demo/t10",
                String.class,
                JacksonUtil.obj2String(req2),
                null);
        System.out.println(s5);

    }


}

到了這里,關(guān)于SpringBoot中的RestTemplate使用筆記的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務器費用

相關(guān)文章

  • JavaWeb小項目——【源碼】使用Vue+axios+Servlet+Lombok+JDBC+MySQL技術(shù)棧實現(xiàn)云筆記管理系統(tǒng)案例的開發(fā)

    JavaWeb小項目——【源碼】使用Vue+axios+Servlet+Lombok+JDBC+MySQL技術(shù)棧實現(xiàn)云筆記管理系統(tǒng)案例的開發(fā)

    使用Vue+axios+Servlet+Lombok+JDBC+MySQL技術(shù)棧實現(xiàn)云筆記管理系統(tǒng)案例的開發(fā) (一)題目要求 使用Vue+axios+Servlet+Lombok+JDBC+MySQL技術(shù)棧實現(xiàn)云筆記管理系統(tǒng)案例的開發(fā) (二)數(shù)據(jù)庫設(shè)計(10分) 創(chuàng)建數(shù)據(jù)庫woniu_note (1)用戶表:t_user,必要字段包含:用戶名(username)、密碼(passwd)

    2024年02月09日
    瀏覽(23)
  • 【SpringBoot】springboot使用RestTemplate 進行http請求失敗自動重試

    【SpringBoot】springboot使用RestTemplate 進行http請求失敗自動重試

    我們的服務需要調(diào)用別人的接口,由于對方的接口服務不是很穩(wěn)定,經(jīng)常超時,于是需要增加一套重試邏輯。這里使用 Spring Retry 的方式來實現(xiàn)。 一、引入POM 二、 修改啟動類 在Spring Boot 應用入口啟動類,也就是配置類的上面加上 @EnableRetry 注解,表示讓重試機制生效。 注意

    2024年02月08日
    瀏覽(19)
  • SpringBoot 使用 RestTemplate 發(fā)送 binary 數(shù)據(jù)流

    SpringBoot 使用 RestTemplate 發(fā)送 binary 數(shù)據(jù)流

    情況說明: 接口A接受到一個數(shù)據(jù)流,在postman里的傳輸方式顯示如下: 接口A接受到這個數(shù)據(jù)流之后,需要轉(zhuǎn)發(fā)到接口B進行處理。 這里要注意一點是: postman圖中的這種方式和MultipartFile流的傳輸方式不同,MultipartFile流方式,是在body的form表單中進行傳輸,需要指定一個key,這

    2024年02月12日
    瀏覽(20)
  • SpringBoot | RestTemplate異常處理器ErrorHandler使用詳解

    SpringBoot | RestTemplate異常處理器ErrorHandler使用詳解

    關(guān)注wx:CodingTechWork ??在代碼開發(fā)過程中,發(fā)現(xiàn)很多地方通過 RestTemplate 調(diào)用了第三方接口,而第三方接口需要根據(jù)某些狀態(tài)碼或者異常進行重試調(diào)用,此時,要么在每個調(diào)用的地方進行異常捕獲,然后重試;要么在封裝的 RestTemplate 工具類中進行統(tǒng)一異常捕獲和封裝。當然

    2024年02月12日
    瀏覽(17)
  • SpringBoot之RestTemplate使用Apache的HttpClient連接池

    SpringBoot自帶的RestTemplate是沒有使用連接池的,只是SimpleClientHttpRequestFactory實現(xiàn)了ClientHttpRequestFactory、AsyncClientHttpRequestFactory 2個工廠接口,因此每次調(diào)用接口都會創(chuàng)建連接和銷毀連接,如果是高并發(fā)場景下會大大降低性能。因此,我們可以使用Apache的HttpClient連接池。

    2024年02月11日
    瀏覽(19)
  • 微服務系列-如何使用 RestTemplate 進行 Spring Boot 微服務通信示例

    下面我們將學習如何創(chuàng)建多個 Spring boot 微服務以及如何使用 RestTemplate 類在多個微服務之間進行同步通信。 微服務通信有兩種風格: 同步通訊 異步通信 在同步通信的情況下,客戶端發(fā)送請求并等待服務的響應。這里重要的一點是協(xié)議(HTTP/HTTPS)是同步的,客戶端代碼只有

    2024年02月05日
    瀏覽(28)
  • springboot~shardingsphere在非spring框架中的使用

    shardingsphere已經(jīng)很方便的被springboot集成了,你只要引入 sharding-jdbc-spring-boot-starter 這個包就可以了,而如果是原生java的話,你就需要自己去實現(xiàn)了,主要是重新定義數(shù)據(jù)源,定義規(guī)則等問題,本文主要介紹原生環(huán)境下的shardingsphere的使用。 添加了數(shù)據(jù)源,確定了mysql數(shù)據(jù)庫,

    2024年01月16日
    瀏覽(17)
  • SpringBoot中RestTemplate和WebClient的使用區(qū)別及優(yōu)缺點含完整代碼

    點擊下載《SpringBoot中RestTemplate和WebClient的使用區(qū)別及優(yōu)缺點含完整代碼》 本文將深入探討Spring Boot中RestTemplate和WebClient的用法、區(qū)別和優(yōu)缺點。通過具體的代碼示例,我們將詳細解釋這兩種HTTP客戶端的使用方法,并分析它們在不同場景下的適用性。 RestTemplate是Spring框架中用

    2024年02月19日
    瀏覽(26)
  • javaweb、spring、springmvc和springboot有什么區(qū)別,都是做什么用的?

    javaweb、spring、springmvc和springboot有什么區(qū)別,都是做什么用的?

    首先不說Spring那一坨,咋們先來說說JavaWeb??礃幼幽芩⒌竭@個問題的都不是什么JavaWeb的熟手,但是至少Java基礎(chǔ)是熟手吧?那么就仔細說說。 JavaWeb,顧名思義就是用Java來做Web程序。那啥又是Web程序呢?那顧名思義就是運行在Web上面的程序。 那Web程序是啥我就不用再解釋了吧

    2024年02月03日
    瀏覽(20)
  • 【spring Cloud】微服務通信的三種方式RestTemplate、Feign遠程調(diào)用與Dubbo的使用

    目錄 一、通過RestTemplate調(diào)用微服務 二、通過Feign遠程調(diào)用 三、Dubbo? 分布式中的遠程調(diào)用大概分為兩種 RESTful接口? REST,即Representational State Transfer的縮寫,如果一個架構(gòu)符合REST原則,就稱它為RESTful架構(gòu)。 每一個URI代表一種資源; 客戶端和服務器之間,傳遞這種資源的某種

    2024年04月11日
    瀏覽(18)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包