如何使用RestTemplate发布XML

我打算使用 Spring Rest Template发布XML消息.经过多次失败后,我开始怀疑Spring Rest Template是否可以POST一条XML消息.这是我开发的Restful客户端. RestTemplate旨在将一个XML的HTTP帖子发送到RestFul Web服务:
Class RestClient{
    public static void main(String[] args) {

RestTemplate restTemplate = new RestTemplate();


    List<HttpMessageConverter<?>> messageConverters = new ArrayList<HttpMessageConverter<?>>();

    //This JAXB Message converter is intended to marshal an XML message over HTTP.
    //However,I find this converter is not doing the intended function.

    Jaxb2RootElementHttpMessageConverter jaxbMessageConverter = new Jaxb2RootElementHttpMessageConverter();
    List<MediaType> mediaTypes = new ArrayList<MediaType>();
    mediaTypes.add(MediaType.TEXT_HTML);
    jaxbMessageConverter.setSupportedMediaTypes(mediaTypes);
messageConverters.add(jaxbMessageConverter);
restTemplate.setMessageConverters(messageConverters);
restTemplate.postForLocation("http://localhost:8080/RecipeProject/restCallConsumer","<add><somefield></somefield></add>",String.class);
   }

}

此控制器旨在使用XML消息.编写控制器以测试客户端是否可以正确发送XML消息:

@RequestMapping("/")
@Controller
public class HomeController {
@RequestMapping(value = "/restCallConsumer",method = RequestMethod.POST)
public String restCallConsumer(String anXML) {
System.out.println("anXML: " + anXML);  
return "aView";
 }
}

我在使用带RestTemplate的XML时发现的大部分示例都涉及使用对象映射工具.此工具将对象映射到XML,反之亦然.就我而言,我只有一个XML字符串,我想通过HTTP post发送.有没有人完成我想做的事情?可能是RestFul客户端不适合我想要做的事情.任何答案将不胜感激:)

编辑

XML消息是通过使用Xstream序列化Map生成的.这是执行此操作的代码:

com.google.common.collect.LinkedListMultimap.ListMultimap<String,String> multimap = com.google.common.collect.LinkedListMultimap.LinkedListMultimap.create();
multimap.put("x","1");
multimap.put("x","2");
multimap.put("y","3");

XStream xStream = new XStream(new DomDriver());
xStream.registerConverter(new MapEntryConverter(xStream.getMapper()));

xStream.alias("add",multimap.getClass());
String xml = xStream.toXML(multimap);
System.out.println(xml);

此代码旨在使用名为MapEntryConverter的转换器将multimap转换为XML字符串.这是转换器的代码:

public static class MapEntryConverter extends MapConverter {

public MapEntryConverter(Mapper mapper) {
    super(mapper);
}

public boolean canConvert(Class clazz) {
    return ListMultimap.class.isAssignableFrom(clazz);
}

public void marshal(Object value,HierarchicalStreamWriter writer,MarshallingContext context) {

    ListMultimap<String,String> map = (ListMultimap<String,String>) value;
    for (String key : map.keys()) {
    writer.startNode(key);
    writer.setValue(map.get(key).get(0));
    writer.endNode();
    }
}

}

编辑

我根据@artbristol推荐更改了我的代码.我在日志文件中看到了这个:

DEBUG:org.springframework.web.client.RestTemplate – 写[
1
1
3
]使用[org.springframework.http.converter.StringHttpMessageConverter@1d34263a]

看起来restTemplate正在发布XML消息.但是,控制器中的anXML参数为null.这是否意味着XML消息无法到达控制器?可能是控制器没有正确实现?

您不需要使用Spring的JAXB编组消息转换器 – 您已经通过将其转换为String来完成工作.只是POST字符串(就像在你的代码中)应该工作(虽然丢失String.class参数,这是用于URL变量,并且摆脱了setMessageConverters调用,因为这阻止了默认的StringHttpMessageConverter工作).

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


php输出xml格式字符串
J2ME Mobile 3D入门教程系列文章之一
XML轻松学习手册
XML入门的常见问题(一)
XML入门的常见问题(三)
XML轻松学习手册(2)XML概念
xml文件介绍及使用
xml编程(一)-xml语法
XML文件结构和基本语法
第2章 包装类
XML入门的常见问题(二)
Java对象的强、软、弱和虚引用
JS解析XML文件和XML字符串详解
java中枚举的详细使用介绍
了解Xml格式
XML入门的常见问题(四)
深入SQLite多线程的使用总结详解
PlayFramework完整实现一个APP(一)
XML和YAML的使用方法
XML轻松学习总节篇