2017-08-14 67 views
0

我試圖解析春季啓動下面的XML響應:RestTemplate:沒有合適的HttpMessageConverter發現異常

響應結構:從服務

<!DOCTYPE RESULT SYSTEM 'http://www.example.com/example/exampleV1.00.dtd'> 
<RESULT REQID ='10961549902'> 
    <MID SUBMITDATE='2017-08-14 17:17:29' ID='1' TAG = 'null' TID = '24180566483'></MID> 
</RESULT> 

API調用:

RestTemplate restTemplate = new RestTemplate();  
restTemplate.getForObject("http://www.exampleUrl.com",ResponseXml.class); 

的responseXML。 java

@XmlAccessorType(XmlAccessType.FIELD) 
@XmlRootElement(name = "RESULT") 
public class ResponseXml implements Serializable{ 

    @XmlAttribute(name="REQID") 
    private long requestId; 

    @XmlElement(name = "MID") 
    private long MID; 

    public ResponseXml() { 
     super(); 
    } 

    public ResponseXml(long requestId) { 
     super(); 
     this.requestId = requestId; 
    } 

    //getter setter 

    public class MID { 

    @XmlAttribute(name="SUBMITDATE") 
    private Date submitDate; 
    @XmlAttribute(name="ID") 
    private Long id; 
    @XmlAttribute(name="TAG") 
    private Long tag; 
    @XmlAttribute(name="TID") 
    private Long tid; 

    //getter setter 
    } 
} 

拋出異常:

Method threw 'org.springframework.web.client.RestClientException' exception. 

Detailed message: Could not extract response: no suitable HttpMessageConverter found 
for response type [class com.hk.response.sms.NetcoreResponseXml] 
and content type [text/plain;charset=UTF-8] 

請指教修復,至於我怎麼分析的JAVA春季啓動XML響應? 儘管添加了@XmlRootElement註釋,但爲什麼會出現HttpMessageConverter異常?

+2

*內容類型[text/plain的;字符集= UTF-8] *:彈簧可以不考慮如果內容類型表示它是純文本而不是XML,則返回XML響應。 –

+0

收到的響應是XML,爲什麼spring讀取的內容類型是[text/plain; charset = UTF-8]? – Abhinav

+0

因爲發送此響應的服務器('http:// www.exampleUrl.com')將響應的內容類型設置爲text/plain,而不是將其設置爲text/xml或application/xml。 –

回答

0

如果你不能修復服務器可以配置消息中的客戶端應用程序轉換到接受plain/text

// Create converter which supports text/plain mime type. 
MappingJackson2HttpMessageConverter jsonConverter = new MappingJackson2HttpMessageConverter(); 
List<MediaType> mediaTypes = jsonConverter.getSupportedMediaTypes(); 
mediaTypes.add(MediaType.TEXT_PLAIN); 
jsonConverter.setSupportedMediaTypes(mediaTypes); 

// Alternatively get mapper as injected bean: 
// @Inject 
// private XmlMapper mapper; 
XmlMapper mapper = new XmlMapper(); 
jsonConverter.setObjectMapper(mapper); 

RestTemplate restTemplate = new RestTemplate(); 
// Register converter with RestTemplate 
restTemplate.setMessageConverters(Arrays.asList(jsonConverter)); 
相關問題