gpt4 book ai didi

java - 如何将 @Entity 和 @XmlRootElement 组合在一个类中

转载 作者:行者123 更新时间:2023-12-01 13:52:05 25 4
gpt4 key购买 nike

我面临着一种情况,REST 服务接受 XML 请求,并且需要将请求中的数据存储到数据库中。请求 XML 基本上给出了需要持久化的类的值。

例如,假设我需要保留一个类,如下所示:

@Entity
public class Person {
@Id @GeneratedValue
private Long id;
private String firstName;
private String lastName;
}

请求 XML 可能如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<PersonInputs>
<Input type="String" name="firstName">Foo</Input>
<Input type="String" name="lastName">Bar</Input>
</PersonInputs>

我是否可以使用 JAXB 注释来创建 Person 对象并以简单的方式绑定(bind)请求 XML 中的数据?我暂时对 JAXB 不熟悉,所以我希望我能得到一些明智的建议。尽管如此,我们非常感谢您的任何意见。

最佳答案

您可以将此解决方案与附加类 Input 一起使用

@XmlAccessorType(XmlAccessType.FIELD)
public class Input
{
@XmlAttribute
private String type;
@XmlAttribute
private String name;
@XmlValue
private String value;

public Input() {}

public Input(String type, String name, String value)
{
this.type = type;
this.name = name;
this.value = value;
}
}

以及实体中的其他 setter/getter
变体 1

@XmlRootElement(name= "PersonInputs")
@XmlAccessorType(XmlAccessType.NONE)
public class Person
{
@Id @GeneratedValue
private Long id;

private String firstName = "foo";

private String lastName = "bar";

// getters/setters

@XmlElement(name= "Input")
Input getFirstNameXML()
{
return new Input(String.class.getSimpleName(), "firstName", firstName);
}

@XmlElement(name= "Input")
Input getLastNameXML()
{
return new Input(String.class.getSimpleName(), "lastName", lastName);
}
}

变体 2

@XmlRootElement(name= "PersonInputs")
@XmlAccessorType(XmlAccessType.NONE)
public class Person
{
private Long id;

private String firstName = "foo";

private String lastName = "bar";

// getters/setters

@XmlElement(name = "Input")
List<Input> getList() throws NoSuchFieldException, IllegalArgumentException, IllegalAccessException
{
return getInputs(this, "firstName", "lastName"); // fields names
}
}

Util 方法 getInputs

static List<Input> getInputs(Object thisObj, String ... fields) throws IllegalArgumentException, IllegalAccessException, NoSuchFieldException
{
final List<Input> retVal = new ArrayList<Input>();
for (String field : fields)
{
Field f = thisObj.getClass().getDeclaredField(field);
f.setAccessible(true);
retVal.add(new Input(f.getType().getSimpleName(), field, (String )f.get(thisObj)));
}
return retVal;
}

关于java - 如何将 @Entity 和 @XmlRootElement 组合在一个类中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19886940/

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