Tag: resttemplate

使用RestTemplate进行基本身份validation(3.1)

我试图使用Java重现以下curl命令: curl -v -u user:pass http://myapp.com/api 此命令返回一些JSON数据。 我的错误Java实现如下: @Test public void callTest() { RestTemplate restTemplate = createRestTemplate(“user”, “pass”); URI uri = new URI(“http://myapp.com/api”); String res = restTemplate.getForObject(uri, String.class); } private static RestTemplate createRestTemplate(String username, String password) { UsernamePasswordCredentials cred = new UsernamePasswordCredentials(username, password); BasicCredentialsProvider cp = new BasicCredentialsProvider(); cp.setCredentials(AuthScope.ANY, cred); DefaultHttpClient client = new DefaultHttpClient(); […]

强制Spring RestTemplate使用XmlConverter

我们正在与第三方集成,该第三方将带有内容类型标头的xml发送为text / html。 我们计划使用Spring的RestTemplate将它映射到我们从xsds生成的类,但是RestTemplate无法找到用于内容的适当转换器。 第三方拒绝修复内容类型,因为它可能会破坏其他合作伙伴的集成。 Spring的RestTemplate是否有办法强制它使用特定的转换器? 我们基本上只是做以下事情: RestTemplate restTemplate = new RestTemplate(); XmlClass xmlClass = restTemplate.getForObject(“http://example.com/”, XmlClass.class); 并获得以下exception: org.springframework.web.client.RestClientException:无法提取响应:在org.springframework.web.client中找不到适合的响应类型[XmlClass]和内容类型[text / html; charset = ISO-8859-1]的HttpMessageConverter。 HttpMessageConverterExtractor.extractData(HttpMessageConverterExtractor.java:84)

一旦我的线程中断,我怎么能中断RestTemplate调用?

我需要创建一个库,在其中我将具有同步和异步function。 executeSynchronous() – 等到我有结果,返回结果。 executeAsynchronous() – 立即返回一个Future,如果需要,可以在其他事情完成后处理。 我的图书馆的核心逻辑 客户将使用我们的库,他们将通过传递DataKey构建器对象来调用它。 然后,我们将使用该DataKey对象构造一个URL,并通过执行它来对该URL进行HTTP客户端调用,然后在我们将响应作为JSON字符串返回之后,我们将通过创建将该JSON字符串发送回我们的客户DataResponse对象。 有些客户会调用executeSynchronous() ,有些可能会调用executeAsynchronous() ,这就是为什么我需要在我的库中单独提供两个方法。 接口: public interface Client { // for synchronous public DataResponse executeSynchronous(DataKey key); // for asynchronous public Future executeAsynchronous(DataKey key); } 然后我有我的DataClient实现上面的Client接口: public class DataClient implements Client { private RestTemplate restTemplate = new RestTemplate(); private ExecutorService executor = Executors.newFixedThreadPool(10); // for synchronous call […]

在一个字段中反序列化多个类型的JSON

我想反序列化JSON(使用Jackson 1.9.11和RestTemplate 1.0.1),其中一个字段可能具有更多的类型含义,例如: {“responseId”:123,”response”:”error”} 要么 {“responseId”:123,”response”:{“foo”:”bar”, … }} 一个或其他案例可以使用一个特定类型的setter(String od自定义Response类)正常工作,但是当我放入我的实体bean覆盖setter以便能够处理这两种情况时,抛出exception: Caused by: org.springframework.web.client.RestClientException: Could not extract response: no suitable HttpMessageConverter found for response type [xxxx.templates.ExportResponse] and content type [application/json;charset=utf-8] 我在考虑三种解决方案,但我没有让它们工作: 只使用String setter和内部使用ObjectMapper解组该字符串,如果它不等于“error”,但是当JS Array出现时,它不是字符串所以不使用String setter :(。 使用多态类型处理(@JsonTypeInfo注释)与自己的JsonDeserializer扩展 – 我仍然试图理解这一点并实现。 创建HttpMessageConverter列表并放入所有消息转换器,我可以使用。 但我认为这一步是不必要的,因为只使用MappingJacksonHttpMessageConverter,我是对的吗? 编辑:它现在如何工作 实体bean中的setter: @JsonDeserialize(using = ResponseDeserializer.class) public void setResponse(Object responseObject) { if(responseObject instanceof Response) response = […]

如何在multithreading环境中有效地使用RestTemplate?

我正在开发一个项目,我需要对运行Restful Service服务器进行HTTP URL调用,该Restful Service将响应作为JSON字符串返回。 以下是我使用future和callables主要代码 – public class TimeoutThreadExample { private ExecutorService executor = Executors.newFixedThreadPool(10); public String getData() { Future future = executor.submit(new Task()); String response = null; try { response = future.get(100, TimeUnit.MILLISECONDS); } catch (TimeoutException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } return response; […]

在Spring 3.1中使用Basic Auth进行RestTemplate

我们在Spring 3.0中使用RestTemplate与xml配置,它工作得非常好。 <!– –> 但是,当我们尝试迁移到Spring 3.1时,不推荐使用CommonsClientHttpRequestFactory类,并且不再使用公共HttpClient。 我试图使用HttpComponentsClientHttpRequestFactory类和Apache HttpClient设置类似的配置,但没有得到如何设置凭据提供程序。 我们希望httpclient具有基本身份validation。 有没有人这样做或任何指针将是很大的帮助。 提前致谢。

如何使用注释自动assemblyRestTemplate

当我尝试自动assemblySpring RestTemplate时,我收到以下错误: nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [org.springframework.web.client.RestTemplate] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. 在注释驱动的环境中使用Spring 4。 我的调度程序servlet配置如下: 我尝试自动assemblyRestTemplate的课程如下: @Service(“httpService”) public class HttpServiceImpl implements HttpService { @Autowired private RestTemplate restTemplate; @Override public void sendUserId(String userId){ MultiValueMap map = new LinkedMultiValueMap(); map.add(“userId”, userId); […]

如何从RestTemplate读取响应头?

我使用RestTemplate.postForObject将信息发布到Web服务。 除了结果字符串,我还需要响应头中的信息。 有没有办法得到这个? RestTemplate template = new RestTemplate(); String result = template.postForObject(url, request, String.class);

使用REST模板Java Spring MVC从服务器下载大文件

我有一个REST服务,它向我发送一个大的ISO文件,REST服务中没有问题。 现在我已经编写了一个Web应用程序,它调用其余服务来获取文件,在客户端(Web应用程序)端我收到Out Of memory Exception.Below是我的代码 HttpHeaders headers = new HttpHeaders();//1 Line headers.setAccept(Arrays.asList(MediaType.APPLICATION_OCTET_STREAM));//2 Line headers.set(“Content-Type”,”application/json”);//3 Line headers.set(“Cookie”, “session=abc”);//4 Line HttpEntity statusEntity=new HttpEntity(headers);//5 Line String uri_status=new String(“http://”+ip+”:8080/pcap/file?fileName={name}”);//6 Line ResponseEntityresp_status=rt.exchange(uri_status, HttpMethod.GET, statusEntity, byte[].class,”File5.iso”);//7 Line 我在7行收到内存exception,我想我必须缓冲并获取部分内容,但不知道如何从服务器获取此文件,文件大小约为500到700 MB。 谁能请你帮忙。 exception堆栈: org.springframework.web.util.NestedServletException: Handler processing failed; nested exception is java.lang.OutOfMemoryError: Java heap space org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:972) org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852) org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882) org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:778) javax.servlet.http.HttpServlet.service(HttpServlet.java:622) javax.servlet.http.HttpServlet.service(HttpServlet.java:729) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) root cause […]

使用Spring restTemplate跟随302重定向?

RestTemplate restTemplate = new RestTemplate(); final MappingJackson2XmlHttpMessageConverter converter = new MappingJackson2XmlHttpMessageConverter(); final List supportedMediaTypes = new LinkedList(converter.getSupportedMediaTypes()); supportedMediaTypes.add(MediaType.ALL); converter.setSupportedMediaTypes(supportedMediaTypes); restTemplate.getMessageConverters().add(converter); ResponseEntity response = restTemplate.getForEntity(urlBase, MyDTO[].class); HttpHeaders headers = response.getHeaders(); URI location = headers.getLocation(); // Has my redirect URI response.getBody(); //Always null 我的印象是会自动跟踪302。 这个假设我不正确吗? 我现在需要选择这个位置并重新申请?