1.可以用一个参数来控制需要返回json或xml,如output
返回json,这个很简单,如下接口返回的是ResponseEntity 对象
private ResponseEntity returnData(AqiResult result, String type) {
if (StringUtils.equals(type, "json")) {
return new ResponseEntity<>(result, HeaderUtil.getHeader(MediaType.APPLICATION_JSON_UTF8), HttpStatus.OK);
}
return new ResponseEntity<>(XmlUtil.convertToXml(result.getAts()), HttpStatus.OK);
}
以上有两个方法,headerUtil和XmlUtil,如果没有xmlUtil里面的方法,只是将mediaType改为MediaType.APPLICATION_ATOM_XML,返回的xml数据没有<?xml version="1.0" encoding="UTF-8" standalone="yes"?>,所以需要xmlUtil方法里面转换一下
public class HeaderUtil {
public static HttpHeaders getHeader(MediaType mediaType) {
HttpHeaders headers = new HttpHeaders();
headers.setContentType(mediaType);
headers.setAccessControlAllowOrigin("*");
headers.setLastModified(new Date().getTime());
return headers;
}
}
public class XmlUtil {
private static Logger LOGGER = LoggerFactory.getLogger(XmlUtil.class);
public static String convertToXml(Object obj) {
// 创建输出流
StringWriter sw = new StringWriter();
try {
// 利用jdk中自带的转换类实现
JAXBContext context = JAXBContext.newInstance(obj.getClass());
Marshaller marshaller = context.createMarshaller();
// 格式化xml输出的格式
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,
Boolean.TRUE);
// 将对象转换成输出流形式的xml
marshaller.marshal(obj, sw);
} catch (JAXBException e) {
LOGGER.error("输出xml数据异常", e);
}
return sw.toString();
}
}