Tag: resttemplate

如何使用Spring RestTemplate将List或String数组传递给getForObject

我正在用Spring开发一些宁静的服务。 我将传递/获取字符串数组或大字符串作为参数传递给我的服务控制器时遇到了麻烦。 我的代码示例如下所示; 控制器: @RequestMapping(value=”/getLocationInformations/{pointList}”, method=RequestMethod.GET) @ResponseBody public LocationInfoObject getLocationInformations(@PathVariable(“pointList”) String pointList) { // code block } 样本点列表: String pointList = “37.0433;35.2663,37.0431;35.2663,37.0429;35.2664,37.0428;35.2664,37.0426;35.2665,37.0424;35.2667,37.0422;35.2669,37.042;35.2671,37.0419;35.2673,37.0417;35.2674,37.0415;35.2674,37.0412;35.2672,37.0408;35.267,37.04;35.2667,37.0396;35.2665,37.0391;35.2663,37.0388;35.2662,37.0384;35.266,37.0381;35.2659,37.0379;35.2658,37.0377;35.2657,37.0404;35.2668,37.0377;35.2656,37.0378;35.2652,37.0378;35.2652,37.0381;35.2646,37.0382;35.264,37.0381;35.2635,37.038;35.263,37.0379;35.2627,37.0378;35.2626,37.0376;35.2626,37.0372;35.2627,37.0367;35.2628,37.0363;35.2628,37.036;35.2629,37.0357;35.2629,37.0356;35.2628,37.0356;35.2628,37.0355;35.2626”; Web服务客户端代码: Map vars = new HashMap(); vars.put(“pointList”, pointList); String apiUrl = “http://api.website.com/service/getLocationInformations/{pointList}”; RestTemplate restTemplate = new RestTemplate(); LocationInfoObject result = restTemplate.getForObject(apiUrl, LocationInfoObject.class, vars); 当我运行客户端应用程序时,它会抛出一个HttpClientErrorException: 400 Bad Request ,我认为长位置信息字符串会导致此问题。 那么,我该如何解决这个问题呢? 或者是否可以将长字符串值作为参数发布到Web服务? 大家好

使用Spring 4 restTemplate(Java Client和RestController)上传MultipartFile列表

我试图使用spring restTemplate将List of MultipartFile发布到我的RestController,尽管我对我的客户端和控制器使用的确切语法和类型有点困惑。 基于我所做的研究,到目前为止我所拥有的…… FileUploadClient.java public void uploadFiles(List multiPartFileList) throws IOException { MultiValueMap map = new LinkedMultiValueMap(); List files = new ArrayList(); for(MultipartFile file : multiPartFileList) { files.add(new ByteArrayResource(file.getBytes())); } map.put(“files”, files); // headers is inherited from BaseClient headers.setContentType(MediaType.MULTIPART_FORM_DATA); HttpEntity<MultiValueMap> request = new HttpEntity(map, headers); ResponseEntity response = restTemplate.exchange(restURI + “/rest/fileupload/uploadfiles”, HttpMethod.POST, request, String.class); […]

RestTemplate与pem证书

我有私钥和服务器证书的pem证书。 我可以使用curl执行它,一切正常。 curl -O -k –cert-type pem –cert mypem.pem url 但是我希望将它与java一起使用,最好是从Spring开始使用RestTemplate。

RestTemplate to NOT escape url

我正在成功使用Spring RestTemplate: String url = “http://example.com/path/to/my/thing/{parameter}”; ResponseEntity response = restTemplate.postForEntity(url, payload, MyClass.class, parameter); 这很好。 但是,有时parameter是%2F 。 我知道这不是理想的,但它就是它的本质。 正确的URL应该是: http://example.com/path/to/my/thing/%2F : http://example.com/path/to/my/thing/%2F但是当我将parameter设置为”%2F”它会被双重转义为http://example.com/path/to/my/thing/%252F 。 我该如何防止这种情况?

Java Spring resttemplate字符编码

我正在使用Java Spring Resttemplate通过get请求获取json。 我得到的JSON不是特殊字符,而是someö或ß一些奇怪的东西。 所以我猜这个字符编码有些不对劲。 我在互联网上找不到任何帮助。 我现在使用的代码是: String json = restTemplate.getForObject( overPassStatementPostCode, String.class, params);

使用RestTemplate获取InputStream

我正在使用URL类从中读取InputStream。 我有什么方法可以使用RestTemplate吗? InputStream input = new URL(url).openStream(); JsonReader reader = new JsonReader(new InputStreamReader(input, StandardCharsets.UTF_8.displayName())); 如何使用RestTemplate而不是使用URL获取InputStream ?

Spring / RestTemplate – PUT实体到服务器

请看这个简单的代码: final String url = String.format(“%s/api/shop”, Global.webserviceUrl); RestTemplate restTemplate = new RestTemplate(); restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter()); HttpHeaders headers = new HttpHeaders(); headers.set(“X-TP-DeviceID”, Global.deviceID); HttpEntity entity = new HttpEntity(headers); HttpEntity response = restTemplate.exchange(url, HttpMethod.GET, entity, Shop[].class); shops = response.getBody(); 如您所见,上面的代码旨在从服务器(以json格式)获取商店列表,并将响应映射到Shop对象数组。 现在我需要推出新店,例如/ api / shop / 1。 请求实体应具有与返回的格式完全相同的格式。 我应该将/ 1添加到我的url,创建新的Shop类对象,所有字段都填充了我要放置的值,然后使用与HttpMethod.PUT交换? 请为我澄清一下,我是Spring的初学者。 代码示例将不胜感激。 [编辑]我很困惑,因为我刚注意到方法RestTemplate.put()。 那么,我应该使用哪一个? 交换还是放()?

如果占用太多时间,如何取消AsyncRestTemplate HTTP请求?

从开始,我总是混淆如何处理InterruptedException以及如果他们花费太多时间如何正确取消http请求。 我有一个库,我已经为我们的客户提供了两种方法,sync和async。 他们可以调用他们认为适合他们目的的任何方法。 executeSync() – 等到我有结果,返回结果。 executeAsync() – 立即返回一个Future,如果需要,可以在其他事情完成后处理。 它们将传递具有用户ID和超时值的DataKey对象。 我们将根据用户ID确定调用哪台计算机,然后使用该计算机创建一个URL,我们将使用AsyncRestTemplate对URL进行http调用,然后根据它是否成功将响应发送给它们。 我正在使用AsyncRestTemplate 交换方法返回一个ListenableFuture ,我希望在基于NIO的客户端连接中使用异步非阻塞架构,以便请求使用非阻塞IO,这就是我使用AsyncRestTemplate的原因。 这种方法对我的问题定义是否合适? 该库将在非常重的负载下用于生产。 以下是我的界面: public interface Client { // for synchronous public DataResponse executeSync(DataKey key); // for asynchronous public ListenableFuture executeAsync(DataKey key); } 以下是我对界面的实现: public class DataClient implements Client { // using spring 4 AsyncRestTemplate private final AsyncRestTemplate restTemplate = new AsyncRestTemplate(); […]

如何使用RestTemplate为每个请求设置RequestConfiguration?

我有一个供客户使用的库,他们正在传递DataRequest对象,该对象具有userid , timeout和其他一些字段。 现在我使用这个DataRequest对象创建一个URL,然后使用RestTemplate进行HTTP调用,我的服务返回一个JSON响应,我用它来创建一个DataResponse对象并将这个DataResponse对象返回给它们。 下面是我的DataClient类,客户通过将DataRequest对象传递给它。 如果在getSyncData方法中花费太多时间,我在DataRequest使用客户传递的超时值来超时请求。 public class DataClient implements Client { private final RestTemplate restTemplate = new RestTemplate(); private final ExecutorService service = Executors.newFixedThreadPool(10); // this constructor will be called only once through my factory // so initializing here public DataClient() { try { restTemplate.setRequestFactory(clientHttpRequestFactory()); } catch (Exception ex) { // log exception } […]

在spring的resttemplate发出的每个请求发送客户端证书的正确方法是什么?

我想用我的spring应用程序使用REST服务。 要访问该服务,我有一个客户端证书(自签名和.jks格式)进行授权。 对其他服务进行身份validation的正确方法是什么? 这是我的要求: public List getInfo() throws RestClientException, URISyntaxException { HttpEntity httpEntity = new HttpEntity(null, new HttpHeaders()); ResponseEntity resp = restOperations.exchange( new URI(BASE_URL + “/Info”), HttpMethod.GET, httpEntity, Info[].class); return Arrays.asList(resp.getBody()); }