Jackson 1.6.2 REST Web服务/ Apache Wink
如何对枚举字段进行注释以便杰克逊对其进行反序列化?
public enum BooleanField
{
BOOLEAN_TRUE { public String value() { return "1";} },
BOOLEAN_FALSE { public String value() { return "0";} },
Run Code Online (Sandbox Code Playgroud)
BooleanField locked;
public BooleanField getLocked() {return locked;}
Run Code Online (Sandbox Code Playgroud)
杰克逊文档声明它可以通过@JsonValue/ 执行此操作@JsonCreator但不提供任何示例(如何有用!).我敢肯定他们只是不想让太多人使用他们的框架,所以他们保守这个秘密.
有人愿意溢出(java)bean吗?
我想用Jackson来反序列化json,我想将空字符串映射到STANDARD枚举类型。
当我尝试将JsonProperty与空字符串一起使用时,它将忽略空值并引发异常;
value not one of declared Enum instance names:......,STANDARD,...
Run Code Online (Sandbox Code Playgroud)
有什么办法可以解决这个问题?
public enum Type{
@JsonProperty("")
STANDARD,
@JsonProperty("complex")
COMPLEX,
....
}
Run Code Online (Sandbox Code Playgroud)
我的json;
....
"type": "",
....
Run Code Online (Sandbox Code Playgroud) 我也在使用Spring使用AngularJS和WildFly开发Web应用程序。
我的问题是我要疯了,因为注释@requestBody似乎工作错误。
这是我的服务:
@ResponseBody
@RequestMapping(value = "/keyuser", method = RequestMethod.POST,
consumes = "application/json")
public KeyProfileUserSummary updateEmployee(@RequestBody KeyProfileUserSummary keyUser) {
return null;
}
Run Code Online (Sandbox Code Playgroud)
这是我的对象KeyProfileUserSummary的成员:
private Integer id;
private String login;
private String password;
private String firstname;
private String lastname;
private UserRole userRole;
Run Code Online (Sandbox Code Playgroud)
我不知道发生了什么,但是我已经用其他类型的对象测试了该服务,并且效果很好,但是在定义KeyProfileUserSummary时,它不起作用,我收到错误400错误请求。我已经测试过将@RequestBody设置为“ Object”,以便至少可以看到即将发生的事情,并且从前端开始,我得到以下信息:
{id=3, login=aa, password=a, firstname=Martin, lastname=Müller, userRole=ROLE_USER}
Run Code Online (Sandbox Code Playgroud)
UserRole是一个枚举。需要澄清的一点很重要,就是KeyProfileUserSummary只是KeyProfileUser的摘要版本,但是由于我在响应中得到了所有链接的元素,因此我决定发送此较轻的类。使用KeyProfileUser进行的测试非常完美,我在Angular端获得了JSON对象并将其发送回去。
在Angular方面,我对该对象不做任何事情。只需将其接收到列表中,然后按编辑按钮即可将列表中的元素发送回去。这是我发送的方式:
res = $http.post("url.../keyuser", user);
Run Code Online (Sandbox Code Playgroud)
问题是我可以使所有内容与KeyProfileUser完美配合,但是由于数据库确实非常庞大且引用很多,所以我决定切换到这个较轻的类,但是现在我只收到此ERROR 400 BAD REQUEST ...而且我要吊死自己:P
谢谢你的帮助!
我正在尝试使用 Jackson 将 JSON 反序列化为 Java POJO。Json 看起来像
"foo": {
"one": {
"a":1,
"b":"string"
}
"three":{
"a":2
"b":"another"
}
...
}
Run Code Online (Sandbox Code Playgroud)
我想反序列化的类有这个字段:
public class Myclass {
private Map<MyEnum, MyPojo> foo;
//setter and getter
public static MyPojo {
private int a;
private String b;
}
}
Run Code Online (Sandbox Code Playgroud)
我的枚举类型如下所示:
public enum MyEnum {
one("data1"),two("data2")
@JsonValue
String data;
EnumAttrib(String data) {
this.data = data;
}
private static Map<String, MyEnum> ENUM_MAP = new HashMap();
static {
for (MyEnum a: MyEnum.values()) {
ENUM_MAP.put(a.data, a);
}
} …Run Code Online (Sandbox Code Playgroud) 我们使用Jackson 1.9.1对JSON请求响应字符串进行序列化和反序列化.原始Java类型,集合类型和自定义对象(序列化)没有问题.但是,我在尝试将JSON字符串反序列化为java枚举时遇到问题.JSON字符串是这样序列化的:
"wt":{"wt":100.5,"unit":{"LBS":3}}
Run Code Online (Sandbox Code Playgroud)
wt的Java类型是这样的:
public class Weight {
protected double weight;
protected Unit unit;
}
Run Code Online (Sandbox Code Playgroud)
我提到了这个,这个,以及这个在SO上,并提出了重量单位的枚举,如下:
public enum Unit {
KG("kg"),
GM("gm"),
LBS("lbs"),
OZ("oz");
private String value;
private WeightMeasurementUnit(String value) { this.value = value; }
@JsonValue
public String getValue() { return this.value; }
@JsonCreator
public static Unit create(String val) {
Unit[] units = Unit.values();
for (Unit unit : units) {
if (unit.getValue().equals(val)) {
return unit;
}
}
return LBS;
}
}
Run Code Online (Sandbox Code Playgroud)
问题是,当我尝试反序列化上面提到的JSON时,我得到这个错误说:"无法识别的字段"LBS"(类abcdWeight),没有标记为可忽略"异常堆栈跟踪是这样的:
Caused by: …Run Code Online (Sandbox Code Playgroud)