Content type 'text/xml;charset=UTF-8' not supported


最近開發微信公眾號時測試遇到這個問題,因為公眾號發過來的數據是xml,content_type是text/xml

@RequestMapping(value="/message",method= RequestMethod.POST,consumes = {MediaType.TEXT_XML_VALUE},produces = {MediaType.APPLICATION_JSON_VALUE})
    @ResponseBody
    public String message( @RequestBody TextMessage message){
        log.info("smessage = ",message);
        //1. 將token、timestamp、nonce三個參數進行字典序排序
        //接入失敗
        return null;
    }

原因應該是springboot默認解析都是json,需要在配置時加上xml的解析支持,並使用合適的MessageConverter

@Configuration
@EnableWebMvc
public class WebMvcConfig implements WebMvcConfigurer{

@Bean
public RequestMappingHandlerAdapter requestMappingHandlerAdapter() {
    RequestMappingHandlerAdapter adapter = new RequestMappingHandlerAdapter();

    List<HttpMessageConverter<?>> converters = adapter.getMessageConverters();

    MappingJackson2XmlHttpMessageConverter xmlConverter = new MappingJackson2XmlHttpMessageConverter();
    List<MediaType> supportedMediaTypes = new ArrayList<MediaType>();
    MediaType xmlMedia = new MediaType(MediaType.TEXT_XML, Charset.forName("UTF-8"));
    supportedMediaTypes.add(xmlMedia);

    xmlConverter.setSupportedMediaTypes(supportedMediaTypes);

    converters.add(xmlConverter);

    adapter.setMessageConverters(converters);

    return adapter;
}

別忘了,pom.xml上加上

       <dependency>
            <groupId>com.fasterxml.jackson.dataformat</groupId>
            <artifactId>jackson-dataformat-xml</artifactId>
        </dependency>

 使用jackon轉化xml成對象需要在類上加上注解

package com.davidhu.shopguide.web.model.wechat;

import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement;

import javax.validation.constraints.NotEmpty;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;


@JacksonXmlRootElement(localName = "xml")
public class TextMessage extends BaseMessage{


    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }

    public String getMsgId() {
        return msgId;
    }

    public void setMsgId(String msgId) {
        this.msgId = msgId;
    }

    //    @XmlElement(name="Content")
//    @NotEmpty
    @JacksonXmlProperty(localName = "Content")
    private String content;

//    @XmlElement(name="MsgId")
//    @NotEmpty
    @JacksonXmlProperty(localName = "MsgId")

    private String msgId;





}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM