gpt4 book ai didi

java - 解码始终显示 0 和 null

转载 作者:太空宇宙 更新时间:2023-11-04 10:23:44 25 4
gpt4 key购买 nike

我认为最好的方法是复制我的代码,以便您能够理解。

这是我的 POJO 类:

import javax.xml.bind.annotation.XmlAttribute;

public class Product {

private String name;

public Product() {
}

public Product(String name) {
this.name = name;
}

@XmlAttribute(name = "productName")
public String getProduct() {
return name;
}

public void setName(String name) {
this.name = name;
}

}


import java.util.ArrayList;
import java.util.List;

import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name="ShoppingCart")

public class Cart {

private List<Product> productList = new ArrayList<>();
private long CartIdentifier;

public Cart() {

}
public Cart(long id) {
this.CartIdentifier=id;
}

@XmlAttribute(name="CartIdentifier")
public long getId() {
return CartIdentifier;
}

public void setType(long id) {
this.CartIdentifier=id;
}

public Cart(List<Product> list) {
this.productList = list;
}

public void addElement(Product element) {
this.productList.add(element);
}
@XmlElement(name = "CurrentProducts")
public List<Product> getCart() {
return this.productList;
}

public void setCart(List<Product> cart) {
this.productList = cart;
}

}

import java.util.ArrayList;

import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name = "CashRegister")
public class Register {
@XmlElement(name = "ShoppingCart")
private ArrayList<Cart> listCart;

long CartIdentifier;

public Register() {

}

public Register(long id) {
this.CartIdentifier=id;
}
public long getId() {
return CartIdentifier;
}

public void addElementforBonus(Cart element) {
listCart.add(element);
}

public void setType(long id) {
this. CartIdentifier=id;
}

public void setList(ArrayList<Cart> list) {
this.listCart = list;
}

public ArrayList<Cart> getCartList() {
return listCart;
}

}

所以这些是我的 POJO 类,它们主要创建完美的 XML,但是当涉及到从 XML 转换为正常输出时,就会出现问题。有人可以告诉我我在哪里犯了错误,为什么我的输出总是 0 和 null?

import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;

public class Main {

public static void main(String[] args) throws JAXBException, IOException {

ArrayList<Cart> list = new ArrayList<Cart>();

Register store = new Register(1);
store.setType(1);
store.setList(list);

Product first = new Product("Burger");
Product second = new Product("Banana");

Cart cart1 = new Cart(1);
cart1.setType(1);
cart1.addElement(first);
cart1.addElement(second);
store.getCartList().add(cart1);


// create JAXB context and instantiate marshaller
JAXBContext context = JAXBContext.newInstance(Register.class);
Marshaller m = context.createMarshaller();
m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);

// Write to System.out
m.marshal(store, System.out);


m.marshal(store, new File("mrs.xml"));

System.out.println("Output from our XML File: ");
Unmarshaller um = context.createUnmarshaller();
Register reg = (Register) um.unmarshal(new FileReader("mrs.xml"));
ArrayList<Cart> list1 = reg.getCartList();
for(Cart x:reg.getCartList()) {
System.out.println(x.getId());
}
for (Cart cart : list1) {
System.out.println("Cart: " + cart.getId());
for(Product product : cart.getCart()) {
System.out.println("Product: " + product.getProduct());
}
}


}



}

这是我的输出:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<CashRegister>
<ShoppingCart CartIdentifier="1">
<CurrentProducts productName="Burger"/>
<CurrentProducts productName="Banana"/>
</ShoppingCart>
</CashRegister>
Output from our XML File:
0
Cart: 0
Product: null
Product: null

有一个购物车有两种产品,但没有 0 和 null。

不,我的问题不重复。我不想将其作为 Element 或在我的 xml 中显示该元素的名称。我的 xml 看起来很完美,但我无法解码它

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<CashRegister>
<ShoppingCart CartIdentifier="1">
<CurrentProducts productName="Burger"/>
<CurrentProducts productName="Banana"/>
</ShoppingCart>
</CashRegister>
Output from our XML File:
Exception in thread "main" java.lang.ClassCastException: bonusxml.Register cannot be cast to bonusxml.Register1
at bonusxml.Main.main(Main.java:45)

最佳答案

如果您一心想要保留 XML 结构,那么您将不得不为此付出代价。下面是可以让您反序列化您创建的 XML 的类。但是,您最终将使用两组不同的类进行序列化和反序列化。

Cart.java

@XmlRootElement(name="ShoppingCart")
public class Cart1 {

@XmlElement(name = "CurrentProducts")
private List<Product1> productList = new ArrayList<>();
@XmlAttribute(name="CartIdentifier")
private long CartIdentifier;

public Cart1() {}

public Cart1(long id) {
this.CartIdentifier=id;
}
// setters & getters
}

产品.java

public class Product1 {

@XmlAttribute(name = "productName")
private String name;

public Product1() {
}

public Product1(String name) {
this.name = name;
}
// setters & getters
}

Register.java

@XmlRootElement(name = "CashRegister")
public class Register1 {

@XmlElement(name = "ShoppingCart")
private ArrayList<Cart1> listCart;

long CartIdentifier;

public Register1() {

}

public Register1(long id) {
this.CartIdentifier=id;
}
//setters & getters
}

关于java - 解码始终显示 0 和 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50795771/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com