【发布时间】:2015-01-14 22:36:24
【问题描述】:
我已经配置了如下所示的东西:
@Configuration
@EnableWebMvc
@ComponentScan(value = "com.whatever.api")
public class SpringMvcConfig extends WebMvcConfigurerAdapter {
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
converters.add(createXmlHttpMessageConverter());
converters.add(new MappingJackson2HttpMessageConverter());
super.configureMessageConverters(converters);
}
private HttpMessageConverter<Object> createXmlHttpMessageConverter() {
MarshallingHttpMessageConverter xmlConverter =
new MarshallingHttpMessageConverter();
// List<MediaType> mediaType = new ArrayList<>();
// mediaType.add(MediaType.TEXT_XML);
XStreamMarshaller xstreamMarshaller = new XStreamMarshaller();
// xmlConverter.setSupportedMediaTypes(mediaType);
xmlConverter.setMarshaller(xstreamMarshaller);
xmlConverter.setUnmarshaller(xstreamMarshaller);
return xmlConverter;
}
@Bean
MappingJackson2HttpMessageConverter jacksonConverter() {
return new MappingJackson2HttpMessageConverter();
}
@Bean
MarshallingHttpMessageConverter xmlConverter() {
return new MarshallingHttpMessageConverter();
}
@Bean
XStreamMarshaller xstreamMarshaller() {
return new XStreamMarshaller();
}
// added to support files in body of add document request
@Bean
public MultipartResolver multipartResolver() {
CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver();
return multipartResolver;
}
}
这里是返回要进入响应的 XML 的方法:
// @RequestMapping(value = "/getDocuments", method = RequestMethod.GET, produces = { MediaType.TEXT_XML_VALUE })
@RequestMapping(value = "/getDocuments", method = RequestMethod.GET)
@ResponseBody
public String
statementList(@RequestParam("doctype") String doctype,
@RequestParam("bin") String bin,
@RequestParam("br") String br,
@RequestParam("mid") String mid,
@RequestParam("passwd") String passwd,
@RequestParam("dates") String dates,
HttpServletRequest request) {
String xmlResponse;
RequestHandler requestHandler = new RequestHandlerImpl(systemProperties, null, tableDataDao);
xmlResponse = requestHandler.getStatements(bin, br, mid, passwd, dates);
System.out.println("xmlResponse=" + xmlResponse);
return xmlResponse;
}
xmlResponse 字符串值是正确的 XML,完全符合我的要求。我的问题是响应最终看起来像这样:
<string><?xml version="1.0" encoding="UTF-8"?><a bunch of correct, but unformatted, XML here></string>
明显的困难是“”标签似乎不知从何而来。从我注释掉的内容可以看出,我尝试设置 MediaType(为 TEXT_PLAIN、TEXT_XML 和 APPLICATION_XML),无论我选择什么,它都不会删除无关标签。
响应中的 XML 是否正确最终变得相当重要,就像在 xmlResponse String 值中一样。是否有我缺少的设置或其他什么?
【问题讨论】:
标签: java xml spring spring-mvc