相关疑难解决方法(0)

如何使用Jackson json注释enum字段以进行反序列化

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)

Java Bean/Request对象

BooleanField locked;
public BooleanField getLocked() {return locked;}
Run Code Online (Sandbox Code Playgroud)

杰克逊文档声明它可以通过@JsonValue/ 执行此操作@JsonCreator但不提供任何示例(如何有用!).我敢肯定他们只是不想让太多人使用他们的框架,所以他们保守这个秘密.

有人愿意溢出(java)bean吗?

java json jackson

37
推荐指数
3
解决办法
7万
查看次数

如何用杰克逊反序列化空字符串?

我想用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)

java jackson

7
推荐指数
1
解决办法
876
查看次数

@RequestBody无法在Rest服务上使用

我也在使用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

谢谢你的帮助!

java rest spring json angularjs

5
推荐指数
1
解决办法
5071
查看次数

如果枚举映射键为空或未知,则忽略 JSON 反序列化

我正在尝试使用 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)

java json jackson jackson-databind

4
推荐指数
1
解决办法
2968
查看次数

从JSON反序列化java枚举

我们使用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)

java enums json jackson

3
推荐指数
1
解决办法
3万
查看次数

标签 统计

java ×5

jackson ×4

json ×4

angularjs ×1

enums ×1

jackson-databind ×1

rest ×1

spring ×1