当前位置: 首页 > 知识库问答 >
问题:

以纯文本形式获取XML

张坚白
2023-03-14

我有这个Spring Rest APIendpoint:

@PostMapping(value = "/v1/", consumes = { MediaType.APPLICATION_XML_VALUE,
            MediaType.APPLICATION_JSON_VALUE }, produces = { MediaType.APPLICATION_XML_VALUE,
                    MediaType.APPLICATION_JSON_VALUE })
    public PaymentResponse handleMessage(@RequestBody PaymentTransaction transaction, HttpServletRequest request) throws Exception {

    // get here plain XML  

}

XML模型。

@XmlRootElement(name = "payment_transaction")
@XmlAccessorType(XmlAccessType.FIELD)
public class PaymentTransaction {
    public enum Response {
        failed_response, successful_response
    }

    @XmlElement(name = "transaction_type")
    public String transactionType;
    .........
}
@SpringBootApplication
@EntityScan("org.plugin.entity")
public class Application extends SpringBootServletInitializer implements WebMvcConfigurer {

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(Application.class);
    }

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
    ........

    @Bean
    public RestTemplate rsestTemplate() {
        List<ClientHttpRequestInterceptor> interceptors = new ArrayList<>();
        RestTemplate restTemplate = new RestTemplate(
                new BufferingClientHttpRequestFactory(new SimpleClientHttpRequestFactory()));
        restTemplate.setInterceptors(interceptors);
        return restTemplate;
    } 
}
@Component
public class RestTemplateHeaderModifierInterceptor implements ClientHttpRequestInterceptor {

    @Override
    public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution)
            throws IOException {

        StringBuilder sb = new StringBuilder();
        sb.append("[ ");
        for (byte b : body) {
            sb.append(String.format("0x%02X ", b));
        }
        sb.append("]");

        System.out.println("!!!!!!!!!!!!!!!");
        System.out.println(sb.toString());      

        ClientHttpResponse response = execution.execute(request, body);

        InputStream inputStream = response.getBody();

        String result = IOUtils.toString(inputStream, StandardCharsets.UTF_8);

        System.out.println("!!!!!!!!!!!!!!!");
        System.out.println(result);

        return response;
    }
}

但没有任何内容打印到控制台中。知道我错在哪里吗?可能这个组件没有注册?

共有1个答案

云炜
2023-03-14

从HttpServletRequest获取它不应该很简单吗,除非我遗漏了什么。我认为没有必要使用拦截器等。

@PostMapping(value = "/v1/", consumes = { MediaType.APPLICATION_XML_VALUE,
            MediaType.APPLICATION_JSON_VALUE }, produces = { MediaType.APPLICATION_XML_VALUE,
                    MediaType.APPLICATION_JSON_VALUE })
    public PaymentResponse handleMessage(HttpServletRequest request) throws Exception {

    String str, wholeXML = "";
    try {
        BufferedReader br = request.getReader();
        while ((str = br.readLine()) != null) {
            wholeXML += str;
        }
    System.out.println(wholeXML);
    //Here goes comment question, to convert it into PaymentTransaction
   JAXBContext jaxbContext = JAXBContext.newInstance(PaymentTransaction.class);
    Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();

    StringReader reader = new StringReader(wholeXML);
    PaymentTransaction paymentTransaction = (PaymentTransaction) unmarshaller.unmarshal(reader);
}
 类似资料:
  • 当我打印响应文本(使用alert)时,它会打印包含所有HTML信息的消息。实际消息以粗体突出显示 响应消息 HTML>标题>标题>Apache Tomcat/5.0.28-错误报告/标题>样式>!--{font-family:Tahoma,Arial,Sans-serif;color:white;background-color:#525d76;font-size:22px;}H2{font-fa

  • 问题内容: 对于本地Apache服务器(与Ubuntu一起运行)上的某个文件夹,我希望所有* php文件都将显示为好像纯文本文件一样。我需要这个,因为我只想查看这些文件的源代码而不运行它们。 在搜索时,我发现大多数人都存在相反的问题:-),并且真的找不到适合我的解决方案。 我需要在文件夹中包含什么? 谢谢! 问题答案: 答案: 在.htaccess文件类型中 感谢布拉德!

  • 我的REST Web应用程序中有以下代码: 代码: 如何确保电子邮件发送和呈现为而不是纯文本?

  • 问题内容: 我从API获得以下JSON: 我正在使用Jackson库将此JSON反序列化为Java对象。我不想为对象创建一个特殊的类。我只是想以纯文本形式获得它。这样。 在我的POJO中,这应该作为字符串,即: 是否可以将JSON的此部分作为纯文本获取? 编辑: 我得到的错误 问题答案: 利用。 只需在POJO中为该字段输入以下内容,它便会为您工作。 凡如下: 给出以下输出:

  • 我在一个具有特定ID的div中使用javascript创建了一个SVG元素。我的主要目标是获得SVG图像,让用户下载它。 因此,我的想法可能是绝对错误的,是使用,获取子元素,这是我的SVG,然后执行以获取字符串并将其保存到某个位置。我可以看到元素,我知道它在那里,但当我从vaadin打印容器元素时,它没有任何子元素。 我的情况: 我从内容中得到什么,其中是我的DIV,ID: 我错过了什么? 如果这

  • 问题内容: 我使用HttpResponseMessage类作为AJAX调用的响应,该调用从服务返回JSON数据。从服务返回AJAX调用后暂停执行时,我看到此类包含一个Content属性,该属性的类型为System.Net.Http.StreamContent。 如果在浏览器中进行检查,我会看到成功进行了网络调用,并以JSON数据作为响应。我只是想知道为什么我无法在Visual Studio中看到返