Tag: resttemplate

为什么RestTemplate GET响应是在JSON中应该是XML?

我使用RestTemplate(org.springframework.web.client.RestTemplate)在一个额外的弹簧行为上挣扎但没有成功。 我在代码下面的我的洞应用程序中使用并始终接收XML响应,我解析并评估其结果。 String apiResponse = getRestTemplate().postForObject(url, body, String.class); 但无法弄清楚为什么服务器响应在执行后呈JSON格式: String apiResponse = getRestTemplate().getForObject(url, String.class); 我在低级RestTemplate调试,内容类型是XML,但不知道为什么结果是在JSON中。 当我从浏览器访问时,响应也是XML格式,但在apiResponse中我得到了JSON。 我在阅读Spring文档后尝试了很多选项http://docs.spring.io/spring/docs/3.0.x/api/org/springframework/web/client/RestTemplate.html 还试图明确修改标题,但仍然无法搞清楚。 我调试了RestTemplate类,并注意到这个方法总是设置application / json: public void doWithRequest(ClientHttpRequest request) throws IOException { if (responseType != null) { List allSupportedMediaTypes = new ArrayList(); for (HttpMessageConverter messageConverter : getMessageConverters()) { if (messageConverter.canRead(responseType, null)) { List supportedMediaTypes = messageConverter.getSupportedMediaTypes(); for (MediaType supportedMediaType […]

当我只想使用RestTemplate时,如何防止在Spring Boot中自动启动tomcat / jetty

我想通过在SpringBoot应用程序中包含工件来使用RestTemplate / TestRestTemplate org.springframework spring-web 但这会自动启动Tomcat或Jetty。 有没有办法将其关闭,或者不包括上述工件。 TestRestTemplate位于引导工件中,但不是基础RestTemplate。

Spring RestTemplate发布回复

我不熟悉Spring RestTemplate。 但对于这个项目,我必须使用Spring RestTemplate发送POST调用来使用rest api。 我正在使用此代码: String restCall = restTemplate.postForObject(url+restParm, null, String.class); 这工作正常。 我想要恢复HTTP状态代码(例如:200 OK)。 我怎么能这样做? 谢谢。

当HTTP请求具有返回状态401时,如何在Java中解析响应主体

我正在使用Spring的RestTemplate和Jackson来使用RESTful JSON API。 在某些情况下,我们可能会收到一个Status 401 (未授权)响应,其中包含由API制造商定义的自定义JSON主体,如下所示: { “code”: 123, “message”: “Reason for the error” } 我们需要解析主体,并在业务逻辑中使用code属性。 这是我们需要解析的错误响应Java对象: public class CustomError { @JsonProperty private Integer code; @JsonProperty private String message; public Integer getCode() { return code; } public String getMessage() { return message; } } 以及一个自定义error handling程序: public class CustomErrorHandler extends DefaultResponseErrorHandler { private RestTemplate restTemplate; […]

如何在返回多种类型XML的URL上使用Spring RestTemplate和JAXB编组

我需要对返回或并始终返回状态代码200的服务进行Rest POST。 (蹩脚的第三方产品!)。 我的代码如下: Job job = getRestTemplate().postForObject(url, postData, Job.class); 我的applicationContext.xml看起来像: domain.fullspec.Job domain.fullspec.Exception 当我尝试拨打此电话并且服务失败时,我得到: Failed to convert value of type ‘domain.fullspec.Exception’ to required type ‘domain.fullspec.Job’ 在postForObject()调用中,我要求一个Job.class而不是一个,它正在变得烦恼。 我想我需要能够做一些事情: Object o = getRestTemplate().postForObject(url, postData, Object.class); if (o instanceof Job.class) { … else if (o instanceof Exception.class) { } 但这不起作用,因为JAXB抱怨它不知道如何编组到Object.class – 这并不奇怪。 我试图创建MarshallingHttpMessageConverter的子类并覆盖readFromSource() protected Object readFromSource(Class clazz,HttpHeaders headers,Source […]

如何使用MockRestServiceServer模拟RestTemplet?

@RunWith(MockitoJUnitRunner.class) public class FeatureFlipperManagerTest { @Autowired RestTemplate restTemplate = new RestTemplate(); @Autowired Service service = new Service(); MockRestServiceServer mockServer = MockRestServiceServer.createServer(restTemplate); @Test public void test() throws Exception { mockServer.expect(requestTo(Mockito.anyString())) .andRespond(withSuccess(“{\”enabled\”:true}”, MediaType.APPLICATION_JSON)); boolean res = service.isEnabled(“xxx”); mockServer.verify(); Assert.assertEquals(true, res); } } 我有MockRestServiceServer来模拟服务中的restTemplete。 但它总是失败。 它显示错误为java.lang.AssertionError: Further request(s) expected 0 out of 1 were executed 。 任何人都可以让我知道我没有做对的地方。 服务本身看起来像这样: […]

415通过REST模板发送json文件时不支持的媒体类型

我试图通过REST模板发送一个json文件。 当我通过POST man发送它作为MULTIPART_FORM_DATA时,它工作正常。 我应该给出的名称是具体的(比方说aaa )。 附上截图 POSTMAN。 但是当我在另一个stackoverflow post中指定的代码中尝试相同时,我得到415 Unsupported Media Type错误 org.springframework.web.client.HttpClientErrorException: 415 Unsupported Media Type at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:91) ~[spring-web-4.1.9.RELEASE.jar:4.1.9.RELEASE] at org.springframework.web.client.RestTemplate.handleResponse(RestTemplate.java:616) ~[spring-web-4.1.9.RELEASE.jar:4.1.9.RELEASE] at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:572) ~[spring-web-4.1.9.RELEASE.jar:4.1.9.RELEASE] at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:532) ~[spring-web-4.1.9.RELEASE.jar:4.1.9.RELEASE] at org.springframework.web.client.RestTemplate.postForObject(RestTemplate.java:332) ~[spring-web-4.1.9.RELEASE.jar:4.1.9.RELEASE] at 请不要将其标记为重复,因为指定的答案对我不起作用。 不共享代码,因为我的代码与此完全相同,除了 requestParamerterMap.add(“attachment”, resource); 我的代码在哪里 requestParamerterMap.add(“aaa”, resource); 从服务器端调试后,看起来请求正在向服务器伸出。 我能够在服务器端看到以下错误: [{error=Unsupported Media Type, exception=org.springframework.web.HttpMediaTypeNotSupportedException, message=Content type ‘application/octet-stream’ not supported, status=415, timestamp=1532557180124}] as “application/json” […]

如何使用Spring RestTemplate表示为JSON的查询参数?

我需要使用Spring RestTemplate向具有表示为JSON的查询参数的HTTP端点发出请求。 restTemplate.getForObject( apiRoot + “/path” + “?object={myObject}”, Response.class, new MyObject()) 在这里,我需要将MyObject转换为JSON(显然是URL编码)。 但RestTemplate只是将其转换为带有toString调用的String 。 MyObject可由Jackson转换为JSON。 UriComponentsBuilder行为方式相同: UriComponentsBuilder.fromHttpUrl(apiRoot) .path(“/path”) .queryParam(“object”, new MyObject())) .queryParam(“access_token”, accessToken) .toUri() 有没有办法避免手工调用ObjectMapper.writeValueAsString ? 更新:澄清一下,在结果中我需要在我的URI中使用?object={“key”:42} (或者在URL编码forms?object=%7B%22key%22%3A42%7D ),因为MyObject有一个属性key ,值等于42 。

将字段序列化为json

我需要向REST服务发送一个JSON主体。 不幸的是,服务很老,我需要发送一个包含JSON字符串字段的POJO。 所以它看起来像这样: class SomeData { int id; SomePojo jsonField; … } 所以SomeData应该像这样发送: {‘id’: 1, ‘jsonField’: some_json_string} 我没有找到任何jackson魔法注释使其工作,我怀疑它可以以某种方式制作,因为Java中的类型擦除,可能无法为此目的编写自定义序列化器,但我不确定。 您能否建议我如何使其工作或解决问题? 非常感谢你提前!

org.springframework.web.client.RestClientException:无法提取响应:

我正在创建一个从服务器上消耗json的restful API。 但我得到了follexception: org.springframework.web.client.RestClientException:无法提取响应:在org.springframework上没有为响应类型[[Lexamples.dto.DummyDTO;]和内容类型[text / json; charset = utf-8]找到合适的HttpMessageConverter。 org.springframework.web.client.RestTemplate.execute(RestTemplate.java: 409)atg.springframework.web.client.RestTemplate.getForObject(RestTemplate.java:207)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)at sun位于org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite $ PojoMachedMethodSite.invoke(PojoMetaMethodSite.java)的java.lang.reflect.Method.invoke(Method.java:597)中的.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) :189)在org.codehaus.groovy.runtime.calls 在org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:45)的org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite。)中的ite.PojoMetaMethodSite.call(PojoMetaMethodSite.java:53)。 java:108)at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:120) 代码段: List<HttpMessageConverter> msgConverters = restTemplate.getMessageConverters(); msgConverters.add(new MappingJacksonHttpMessageConverter()); restTemplate.setMessageConverters(msgConverters); DummyDTO[] dummy= restTemplate.getForObject(URI, DummyDTO[].class); 控制器方法代码: public UserDTO[] getUserList(){ List acceptableMediaTypes = new ArrayList(); acceptableMediaTypes.add(MediaType.APPLICATION_JSON); // Set the Accept and Content type header HttpHeaders headers = new […]