Spring启动API响应(application / json)转换为响应(text / xml)

时间:2017-12-19 14:28:23

标签: java spring rest spring-boot microservices

使用用例,Springboot Microservice接受JSON有效负载,然后在@RestController的处理程序中,API将触发另一个下游应用程序应用程序,该应用程序接受application/xml或{{1}中的有效负载} ??

text/xml ---> /api/v1/users Type:application/JSON

使用RestTemplate和HTTPEntity来表示请求和响应实体。

现在面对以下错误:

/api/v1/downstream/ Type: text/xml

如果我使用Could not extract response: no suitable HttpMessageConverter found for response type (How could I register new message converters), please bare with me I'm new to Spring boot and Spring. 注释,那么错误是:无法为类实例化JAXBContext。

还有什么建议我怎么能实现这个功能?

1 个答案:

答案 0 :(得分:0)

根据您的问题,您必须实现以下流程:

客户端---- json - ---> 服务器1 -------- Xml --- - - > Server2

客户< ---- json ----服务器1< -------- Xml ------- Server2

您可以将JSON数据接受到Java模型中,现在您必须使用XML作为输入来访问另一个Web服务。以下是可以帮助您实现它的方法:

    private static String jaxbObjectToXML(Customer customer) {
    String xmlString = "";
    try {
        JAXBContext context = JAXBContext.newInstance(Customer.class);
        Marshaller m = context.createMarshaller();

        m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE); // To format XML

        StringWriter sw = new StringWriter();
        m.marshal(customer, sw);
        xmlString = sw.toString();

    } catch (JAXBException e) {
        e.printStackTrace();
    }

    return xmlString;
}

将此XML传递给webservice,它将返回XML。 UNmarshall再次使用它的响应对象并使用Spring Boot Webservice作为JSON返回。

Reference