問題描述
我正在編寫一個客戶端來使用 RESTful 服務(wù).我需要以鍵值對的形式發(fā)送請求,他們建議我為此使用 Map.我調(diào)用的 RESTful 服務(wù)只會接受 JSON,而我的客戶端將使用 Java.它實(shí)際上將成為現(xiàn)有企業(yè) EJB 項目的一部分.
I am writing a client to consume a RESTful service. I am required to send the request in key, value pair, they suggested that I use a Map for this. The RESTful service that I am calling is only going to accept JSON and my client is going to be in Java. It is actually going to be part of an existing enterprise EJB project.
我已經(jīng)編寫了一個客戶端并且能夠成功調(diào)用 RESTful 服務(wù).事實(shí)上,如果我以字符串(JSON 格式)發(fā)送請求,我什至?xí)盏交貜?fù).但我想避免這種將 Map 轉(zhuǎn)換為 JSON 格式字符串然后在 Request 中發(fā)送出去的手動工作.
I have written up a client and am able to call the RESTful service successfully. In fact, if I send the request in String (JSON format) then I even get a response back. But I would like to avoid this manual work of converting the Map into a JSON format string and then sending it out in Request.
我已將 Content-Type 設(shè)置為 application/json 并創(chuàng)建了一個包含 KeyValue 對的 Map.
I have set Content-Type as application/json and have created a Map which will contain the KeyValue pair.
來自客戶端的代碼片段:
Snippet of code from Client:
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
headers.add(MyConstants.JWT_AUTH_TOK, restUtil.getJWTToken());
restTemplate = new RestTemplate();
ModelReqVO modVO = new ModelReqVO();
Map<String, String> dataMap = new HashMap<String, String>();
//Setting key,value into datamap (e.g. "key1", "value1")
modVO.setDataMap(dataMap);
ResponseEntity<ModelRspnsVO> result = restTemplate.postForEntity(mySrvcFN, new HttpEntity(modVO, headers), ModelRspnsVO.class);
請求(ModelReqVO)類:
Request (ModelReqVO) Class:
public class ModelReqVO {
private HashMap<String, String> dataMap;
ModelReqVO() {
this.dataMap = new HashMap<String, String>();
}
//getter and setter generated
}
這是我得到的例外-
RestClientException: Could not write request: no suitable HttpMessageConverter found for request type [com.mycomp.myproj.ModelReqVO] and content type [application/json].
我檢查了我的 restTemplate 上的 HttpMessageConverters,我確實(shí)找到了 MappingJacksonHttpMessageConverter.代碼中還需要我使用上述轉(zhuǎn)換器嗎?
I checked the HttpMessageConverters that I have on my restTemplate and I did find MappingJacksonHttpMessageConverter. Is something else required of me in the code to use the said converter?
我在 Spring.io 論壇上找到了幾個示例,但它們是關(guān)于需要 www/form 內(nèi)容而不是 JSON 的服務(wù).令人驚訝的是,我沒有找到有關(guān)使用特定轉(zhuǎn)換器將 Map 作為 JSON 發(fā)送的任何詳細(xì)信息.
I found a couple of examples on Spring.io forums, but they were about a service which required www/form content and not JSON. I, surprisingly, do not find any details about using a particular converter for Map to be sent as a JSON.
注意:代碼片段可能有編譯錯誤,我是從手機(jī)上輸入代碼的.出于安全原因,我無法在我編碼的機(jī)器上使用互聯(lián)網(wǎng).
Note: The code snippets might have compile errors, I have typed the code out from my mobile. I cannot use the internet on the machine that I code in for security reasons.
推薦答案
報錯信息說沒有找到適合請求類型的HttpMessageConverter
,所以只需在MappingJackson2HttpMessageConverter
>MediaType 到 RestTemplate
The error message says no suitable HttpMessageConverter
found for request type, so just add MappingJackson2HttpMessageConverter
with MediaType
to RestTemplate
MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
coverter.setSupportedMediaTypes(Arrays.asList(MediaType.TEXT_PLAIN, MediaType.APPLICATION_JSON);
restTemplate.getMessageConverters().add(0, converter)
這篇關(guān)于HttpMessageConverter 異常:RestClientException:無法寫入請求:找不到合適的 HttpMessageConverter的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網(wǎng)!