zoukankan      html  css  js  c++  java
  • 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;
    
    
    
    
    
    }
    喜欢艺术的码农
  • 相关阅读:
    面试常见题型
    docker的安装及基本使用
    redis缓存的使用
    ab压测工具
    redis分布式锁的使用
    webSocket的基本使用
    递归、os.walk、内置函数、lambda、hashlib模块、md5加密、python安装第三方模块、操作mysql数据库
    【Apache】Apache ab压力测试工具Window下载和用法详解
    函数默认值参数、全局变量、深拷贝、可变参数、关键字参数、json模块使用、time模块操作
    python的文件操作1,监控日志联系、读取大文件、修改文件、集合、元组、random模块以及函数初识
  • 原文地址:https://www.cnblogs.com/zjhgx/p/14551150.html
Copyright © 2011-2022 走看看