[英]Jackson JSON / XML root elements are not the same
首先,請注意,我的問題非常類似於: Jackson xml 和 json 根元素,但僅在我只需要一個JSON 根元素的情況下略有不同。
這是我的 UserList 類:
@XmlRootElement(name = "users")
@JsonRootName(value = "users")
@JsonTypeName(value = "users")
public class UserList {
// Tried all of these:
// @JacksonXmlElementWrapper(localName = "user")
// @JacksonXmlProperty(localName = "user")
// @JsonUnwrapped
// @JsonTypeInfo(include = JsonTypeInfo.As.WRAPPER_OBJECT, use = JsonTypeInfo.Id.NONE /**.NAME */)
// @JsonProperty("users") // <-- Sets both XML and JSON to 'users'
@JacksonXmlElementWrapper(useWrapping = false) // <-- This gets rid of duplicate 'users' in XML
public List<User> user = new ArrayList<User>();
public UserList() {}
}
這是我的用戶類:
@XmlRootElement(name = "user")
@JsonRootName(value = "user")
@JsonInclude(Include.NON_NULL)
@XmlAccessorType(XmlAccessType.FIELD)
public class User {
private int userId;
private String userName;
private String password;
private long passwordUpdated;
private long passwordExpire;
private String sessionKey;
public User () {}
getters and setters here ...
}
這是我想要的 JSON(目前我使用當前測試代碼得到“用戶”而不是“用戶”):
{
"users": [{
"userId": 1,
"userName": "test1@user.com",
"passwordUpdated": 0,
"passwordExpire": 0,
"sessionKey": "key"
}, {
"userId": 2,
"userName": "test2@user.com",
"passwordUpdated": 0,
"passwordExpire": 0,
"sessionKey": "key"
}]
}
這是我想要的 XML(這是我使用當前測試代碼得到的):
<?xml version="1.0" encoding="UTF-8"?>
<users>
<user>
<userId>1</userId>
<userName>test1@user.com</userName>
<passwordUpdated>0</passwordUpdated>
<passwordExpire>0</passwordExpire>
<sessionKey>key</sessionKey>
</user>
<user>
<userId>2</userId>
<userName>test2@user.com</userName>
<passwordUpdated>0</passwordUpdated>
<passwordExpire>0</passwordExpire>
<sessionKey>key</sessionKey>
</user>
</users>
這是我的測試代碼:
{
User user1 = new User();
user1.setUserId(1);
user2.setUserName("test1@user.com");
user1.setPasswordExpire(0);
user1.setPasswordUpdated(0);
user1.setSessionKey("key");
User user2 = new User();
user2.setUserId(1);
user2.setUserName("test2@user.com");
user2.setPasswordExpire(0);
user2.setPasswordUpdated(0);
user2.setSessionKey("key");
UserList userList = new UserList();
userList.user.add(user1);
userList.user.add(user2);
String json = MapperUtils.modelToJson(userList);
String xml = MapperUtils.modelToXml(userList);
}
public class MapperUtils {
final static ObjectMapper jsonMapper = new ObjectMapper().configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
final static ObjectMapper xmlMapper = new XmlMapper().configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
public static String modelToJson(final Object object) throws IOException {
return jsonMapper.writeValueAsString(object);
}
public static String modelToXml(final Object object) throws IOException {
return xmlMapper.writer().writeValueAsString(object);
}
}
我的問題是我希望我的 JSON 的根元素是“用戶”而不是“用戶”。 任何幫助,將不勝感激。
@JacksonXmlProperty
是在 xml 中重命名屬性的方法。 然后讓 JSON 的名稱成為我在下面更改為users
的字段名稱。 您還可以刪除您嘗試過的大部分注釋。 這將產生預期的 XML 和 JSON:
@JsonInclude(JsonInclude.Include.NON_NULL)
@XmlAccessorType(XmlAccessType.FIELD)
class User {
private int userId;
private String userName;
private String password;
private long passwordUpdated;
private long passwordExpire;
private String sessionKey;
}
@JsonRootName(value = "users")
class UserList {
@JacksonXmlProperty(localName = "user")
@JacksonXmlElementWrapper(useWrapping = false)
List<User> users = new ArrayList<>();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.