在Spring中使用XML媒体类型发布到表单

时间:2017-07-06 21:15:11

标签: java spring

我正在尝试使用Spring发布表单数据。该表单数据为XML格式。但每次我尝试发帖时,都会收到415错误。

public void setFormData(String name, Integer age){
  String url = "https://my.example.com/path/";

  HttpHeaders headers = new HttpHeaders();
  headers.setContentType(MediaType.APPLICATION_XML);

  Form form = new Form();

  form.set("name", name);
  form.set("age", age);

  HttpEntity<Object> request = new HttpEntity<Object>(form, headers);
  RestTemplate restTemplate = new RestTemplate();
  restTemplate.put(url, request);

}

由于上述方法不起作用,我去实施了这个:

public void setFormData(String name, Integer age){
  String url = "https://my.example.com/";

  HttpHeaders headers = new HttpHeaders();
  headers.setContentType(MediaType.APPLICATION_XML);

  MultiValueMap<String, Object> params= new LinkedMultiValueMap<String, Object>();
  params.add("name", name);
  params.add("age", age);

  HttpEntity<MultiValueMap<String, Object>> request = new HttpEntity<MultiValueMap<String, Object>>(map, headers);
  RestTemplate restTemplate = new RestTemplate();

  List<HttpMessageConverter<?>> messageConverters = new ArrayList<HttpMessageConverter<?>>();
  Jaxb2RootElementHttpMessageConverter jaxbMessageConverter = new Jaxb2RootElementHttpMessageConverter();
  List<MediaType> mediaTypes = new ArrayList<MediaType>();
  mediaTypes.add(MediaType.APPLICATION_XML);
  jaxbMessageConverter.setSupportedMediaTypes(mediaTypes);
  messageConverters.add(jaxbMessageConverter);
  restTemplate.setMessageConverters(messageConverters);

}

接受请求的XML:

<resource path="/path">
  <method name="POST">
   <request>
    <representation mediaType="application/x-www-form-urlencoded">
     <param name="name" style="query" type="xs:string">
     <param name="age" style="query" type="xs:int">
    </representation>
   </request>
  </method>
</resource>

但我仍然遇到415错误。我也尝试在Java代码中将MediaType设置为APPLICATION_FORM_URLENCODED但是我得到415错误。如何使用Spring发布到XML表单?任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

  1. 将您的ContentType更改为第一个blob中的APPLICATION_FORM_URLENCODED。用Http消息转换器混淆的第二代代码是没用的。我不确定您填充的Form是什么 - MultiValueMap也应该有用。
  2. 使用POST方法,而不是PUT。 postForEntitypostForObject都应该这样做。
  3. 说实话,我从来没有见过如上所述用XML声明的Spring控制器,而且我是一名Spring提交者。你考虑过使用注释吗?世界在2011年停止使用XML Spring配置。