在 Java 应用程序中,处理 XML 数据并将其转换为 JSON 格式是很常见的任务。以下是一个示例代码,展示如何使用 Java 完成这一操作:
前期准备
- 确保你的项目中包含以下依赖:
xml
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.13.0</version>
</dependency>
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20210307</version>
</dependency>
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.1</version>
</dependency>
<dependency>
<groupId>org.glassfish.jaxb</groupId>
<artifactId>jaxb-runtime</artifactId>
<version>2.3.1</version>
</dependency>
- 创建一个 Java 类来表示 XML 数据结构:
java
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import java.util.List;
@XmlRootElement(name = "data")
public class Data {
private String name;
private int age;
private List<String> hobbies;
// Getters and setters
@XmlElement(name = "name")
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@XmlElement(name = "age")
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@XmlElement(name = "hobbies")
public List<String> getHobbies() {
return hobbies;
}
public void setHobbies(List<String> hobbies) {
this.hobbies = hobbies;
}
}
接收 XML 参数
- 使用
JAXB
解析 XML 数据:
java
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Unmarshaller;
import java.io.StringReader;
public class XMLParser {
public static Data parseXML(String xml) throws Exception {
JAXBContext context = JAXBContext.newInstance(Data.class);
Unmarshaller unmarshaller = context.createUnmarshaller();
StringReader reader = new StringReader(xml);
Data data = (Data) unmarshaller.unmarshal(reader);
return data;
}
}
- 在你的控制器中接收 XML 参数:
java
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class DataController {
@PostMapping("/receive-xml")
public ResponseEntity<String> receiveXML(@RequestBody String xml) {
try {
Data data = XMLParser.parseXML(xml);
String json = JSONConverter.convertToJSON(data);
return new ResponseEntity<>(json, HttpStatus.OK);
} catch (Exception e) {
return new ResponseEntity<>("Error processing XML", HttpStatus.BAD_REQUEST);
}
}
}
将 XML 转换为 JSON
- 使用
Jackson
将 Java 对象转换为 JSON 字符串:
java
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import org.json.JSONObject;
public class JSONConverter {
public static String convertToJSON(Data data) throws Exception {
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.enable(SerializationFeature.INDENT_OUTPUT);
return objectMapper.writeValueAsString(data);
}
}
测试代码
假设你使用的是 Spring Boot 项目,可以通过以下方式测试:
- 启动你的 Spring Boot 应用程序。
- 使用工具如 Postman 或 curl 发送一个 POST 请求到
/receive-xml
,内容类型为application/xml
,并附带以下 XML 数据:
xml
<data>
<name>John</name>
<age>30</age>
<hobbies>
<hobby>Reading</hobby>
<hobby>Traveling</hobby>
<hobby>Cooking</hobby>
</hobbies>
</data>
- 你应该会收到以下 JSON 响应:
json
{
"name" : "John",
"age" : 30,
"hobbies" : [ "Reading", "Traveling", "Cooking" ]
}
总结
通过以上代码,我们展示了如何在 Java 中接收 XML 格式的参数,并将其转换为 JSON 格式。这个过程包括以下步骤:
- 使用
JAXB
解析 XML 数据并绑定到 Java 对象。 - 使用
Jackson
将 Java 对象转换为 JSON 字符串。 - 通过 REST API 接收 XML 请求并返回 JSON 响应。
希望这篇文章对你有所帮助,如果你有任何问题,请随时提问!