Kevin
Kevin

Reputation: 25269

morphia handle bad data

Let's say I have some json like this in mongo:

{"n":"5"}

and a java class like this:

@Entity 
public class Example {
    Integer n;
}

This works (I know that the json should store the value as an int not a string but I don't control that part).

Now when I have data like this morphia throws:

{"n":""}

I'm looking for a workaround (the behavior I'd like is for empty string to be treated same as null).

The only workaround I have so far is:

public class Example {
    String n;

    public Integer getN() {
        return NumberUtils.isNumber(n) ? NumberUtils.createInteger(n) : null;
    }
}

But I'm hoping for some way to hang an annotation on the Integer property that customizes the deserialization behavior.

Upvotes: 2

Views: 746

Answers (1)

Kevin
Kevin

Reputation: 25269

So I asked this on the morphia google group and I thought I'd share the answer. Using the lifecycle annotation @PreLoad allows me to modify the DBObject before conversions into POJO takes place. So this should do it:

@PreLoad void fixup(DBObject obj) {
    if (StringUtils.isEmpty(obj.get("n"))) {
        obj.put("n",null);
    }
}

Upvotes: 6

Related Questions