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;





}
复制代码

 

posted @   zjhgx  阅读(6997)  评论(2编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示