java之xml报文传值问题的解决~~~ xml格式报文请求后端

本文详细介绍了如何使用Postman通过XML格式发送请求到Java后端,涉及了Jackson XML注解在实体类中的应用,以及如何在Spring框架下处理XML请求体。作者分享了实体类的设计和后端Controller的实现,确保数据映射正确无误。
摘要由CSDN通过智能技术生成

1.这里本人使用postman来请求java后端,在postman中的设置

<TradeData>
	<BaseInfo>
		<RequestDate>2017-07-06 15:47:30</RequestDate>
		<TransNo>00920170627091902001</TransNo>
		<UserCode>test</UserCode>
		<Password>1234@abcd</Password>
	</BaseInfo>
	<ContInfo>
		<AppointMentNo>HXJK0000000000000002</AppointMentNo>
		<ContSource>009</ContSource>
		<BizType>TB</BizType>
		<DocTypeCode>A101</DocTypeCode>
		<DocImgOrder>1</DocImgOrder>
		<DocImgCount>10</DocImgCount>	
	</ContInfo>
</TradeData>

使用post请求,选中Body中的row将上诉报文放入,设置请求方式为XML(这里注意:因为postman版本的不同,选择的方式也不同,有的postman中只有XML格式,而有的postman格式为XML(application/xml)和XML(test/xml)格式),我们选用XML(application/xml)格式来请求,具体体现如下图所示:

在这里插入图片描述

  1. 后端java控制层,这里我是用当下较流行、智能的IDEA来展示后端代码
    先来看实体类的写法。

此处为最外层的封装类

import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement;
import com.sinosoft.mid.module.common.pojo.hcsimguploadnotify.request.BaseInfo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@JacksonXmlRootElement(localName = "TradeData")
@NoArgsConstructor
@AllArgsConstructor
public class TradeDataHCSImgUploadNotifyRequest {

    @JacksonXmlProperty(localName = "BaseInfo")
    BaseInfo baseInfo;

    @JacksonXmlProperty(localName = "ContInfo")
    ContInfo contInfo;
}

BaseInfo实体类如下:


import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class BaseInfo {

    @JacksonXmlProperty(localName = "TradeCode")
    private String tradeCode;

    @JacksonXmlProperty(localName = "TransNo")
    private String transNo;

    @JacksonXmlProperty(localName = "RequestDate")
    private String requestDate;

    @JacksonXmlProperty(localName = "ResponseDate")
    private String responseDate;

    @JacksonXmlProperty(localName = "UserCode")
    private String userCode;

    @JacksonXmlProperty(localName = "Password")
    private String password;

}

ContInfo 实体类:


import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;
import com.sinosoft.mid.module.common.pojo.hcsimguploadnotify.request.DocImgInfos;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class ContInfo {

    @JacksonXmlProperty(localName = "AppointMentNo")
    private String appointMentNo;
    @JacksonXmlProperty(localName = "ContSource")
    private String contSource;
    @JacksonXmlProperty(localName = "BizType")
    private String bizType;
    @JacksonXmlProperty(localName = "DocTypeCode")
    private String docTypeCode;
    @JacksonXmlProperty(localName = "ReqType")
    private String reqType;
    @JacksonXmlProperty(localName = "DocImgInfos")
    private DocImgInfos docImgInfos;
    @JacksonXmlProperty(localName = "DocImgOrder")
    private String docImgOrder;
    @JacksonXmlProperty(localName = "DocImgCount")
    private String docImgCount;

}

这里拾荒者有比较解释一下

  1. ContInfo中的实体类DocImgInfos
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.List;


@Data
@NoArgsConstructor
@AllArgsConstructor
public class DocImgInfos {
    @JacksonXmlProperty(localName = "DocImgInfos")
    private String docImgInfos;
    @JacksonXmlProperty(localName = "DocTypeCount")
    private String docTypeCount;

    @JacksonXmlElementWrapper(useWrapping = false)
    @JacksonXmlProperty(localName = "DocImgInfo")
    private List<DocImgInfo> docImgInfo;

}

  1. 关于List集合中的DocImgInfo
@Data
@NoArgsConstructor
@AllArgsConstructor
public class DocImgInfo {
    @JacksonXmlProperty(localName = "DocTypeCode")
    private String docTypeCode;
    @JacksonXmlProperty(localName = "DocImgPages")
    private String docImgPages;

    @JacksonXmlElementWrapper(useWrapping = false)
    @JacksonXmlProperty(localName = "DocImgPage")
    private List<DocImgPage> docImgInfo;

}

关于List中的实体类,拾荒者本人就不多解释了 ,想必都知道,就是在某一挤报文下,有多个该实体类型。只是层级不同。

本人有必要解释一下***@JacksonXmlProperty(localName = “DocImgPage”)***的意思。

由于***spring容器***的特性,实体类字段都会转小驼峰,而我们在postman中测试的时候采用的有时候是大写开头的报文。所以此注解是保证与请求一致,防止请求的时候映射器处理不到。而实体类名我们有时候也要处理使用***@JacksonXmlRootElement(localName = “TradeData”)***来控制。

  1. 控制层中来设计一个方法来接收这种类型的数据:
 @Autowired
    private ImgUploadService imgUploadService;

    @SneakyThrows
    @PostMapping(value = "/upLoadImg",consumes = MediaType.APPLICATION_XML_VALUE, produces = MediaType.APPLICATION_XML_VALUE,headers ={"content-type=application/xml"} )
    @ResponseBody
    private TradeDataHCSImgUploadNotifyResponse upLoadImg(@RequestBody TradeDataHCSImgUploadNotifyRequest tradeData){
        System.out.println(tradeData);
        TradeDataHCSImgUploadNotifyResponse response = imgUploadService.upLoadImg(tradeData);
        System.out.println(response);
        return response;
    }

请求的PostMapping注解就不多解释了 本人要解释的是里面的值 特别是**headers ={“content-type=application/xml”}**要添加,防止接收数据失败,
接收到如下结果:

TradeDataHCSImgUploadNotifyRequest(baseInfo=BaseInfo(tradeCode=null, transNo=00920170627091902001, requestDate=2017-07-06 15:47:30, responseDate=null, userCode=test, password=1234@abcd), contInfo=ContInfo(appointMentNo=HXJK0000000000000002, contSource=009, bizType=TB, docTypeCode=A101, reqType=null, docImgInfos=null, docImgOrder=1, docImgCount=10))
TradeDataHCSImgUploadNotifyRequest(baseInfo=BaseInfo(tradeCode=null, transNo=00920170627091902001, requestDate=2017-07-06 15:47:30, responseDate=null, userCode=test, password=1234@abcd), contInfo=ContInfo(appointMentNo=HXJK0000000000000002, contSource=009, bizType=TB, reqType=null, docImgCount=10, docImgInfos=DocImgInfos(docImgInfos=null, docTypeCount=null, docImgInfo=[DocImgInfo(docTypeCode=A101, docImgPages=null, docImgInfo=[DocImgPage(docImgOrder=1, docImgAttachNo=null)])])))

希望对同道有所帮助。
此处需要提示:此文章绝非抄袭。
未经本人许可,禁止转载,

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中发送HTTP POST请求并设置报文头的expect参数,并且请求体的格式XML,可以使用Java内置的HttpURLConnection类。以下是一个示例代码: ```java import java.net.HttpURLConnection; import java.net.URL; import java.io.OutputStream; import java.io.BufferedReader; import java.io.InputStreamReader; public class HttpPostWithXmlAndExpectHeader { public static void main(String[] args) throws Exception { String url = "http://example.com/api"; String xmlBody = "<user><name>John</name><age>30</age></user>"; URL obj = new URL(url); HttpURLConnection con = (HttpURLConnection) obj.openConnection(); // 设置HTTP请求方法为POST con.setRequestMethod("POST"); // 设置报文头的expect参数 con.setRequestProperty("Expect", "100-continue"); // 设置请求格式XML con.setRequestProperty("Content-Type", "application/xml"); // 设置请求体 con.setDoOutput(true); OutputStream os = con.getOutputStream(); os.write(xmlBody.getBytes()); os.flush(); os.close(); // 获取响应 int responseCode = con.getResponseCode(); BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream())); String inputLine; StringBuffer response = new StringBuffer(); while ((inputLine = in.readLine()) != null) { response.append(inputLine); } in.close(); // 输出响应 System.out.println("Response Code : " + responseCode); System.out.println("Response Body : " + response.toString()); } } ``` 在代码中,我们首先建立一个URL对象,然后使用HttpURLConnection打开连接。我们设置HTTP请求方法为POST,并设置报文头的expect参数为"100-continue"。接下来,我们设置请求格式XML,并设置请求体并发送请求。最后,我们获取响应并输出响应码和响应体。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值