相关疑难解决方法(0)

Gson:有没有更简单的方法来序列化地图

来自Gson项目的这个链接似乎表明我必须做类似以下的事情来将类型化的Map序列化为JSON:

    public static class NumberTypeAdapter 
      implements JsonSerializer<Number>, JsonDeserializer<Number>,
InstanceCreator<Number> {

    public JsonElement serialize(Number src, Type typeOfSrc, JsonSerializationContext
context) {
      return new JsonPrimitive(src);
    }

    public Number deserialize(JsonElement json, Type typeOfT,
JsonDeserializationContext context)
        throws JsonParseException {
      JsonPrimitive jsonPrimitive = json.getAsJsonPrimitive();
      if (jsonPrimitive.isNumber()) {
        return jsonPrimitive.getAsNumber();
      } else {
        throw new IllegalStateException("Expected a number field, but was " + json);
      }
    }

    public Number createInstance(Type type) {
      return 1L;
    }
  }

  public static void main(String[] args) {
    Map<String, Number> map = …
Run Code Online (Sandbox Code Playgroud)

java json gson

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

如何解决杰克逊无法处理JPA bean中的直接自引用问题

所以我正在使用Java,Hibernate,JPA注释,JAX-RS注释,JAXB注释,Jersey和Jackson JSON解析器开发RESTful数据API.

在尝试了Jersey提供的MAPPING和NATURAL JSON符号的各种配置后,我最终决定使用Jackson JSON解析器.除了这一个问题,杰克逊将是完美的......

我遇到的问题是Jackson没有使用JAXB注释"@XmlID"和"@XmlIDREF",我用它来表示我的实体关系,虽然"@JsonBackReference"和"@JsonManagedReference"帮助这个.在处理直接自引用属性时,这种组合似乎会崩溃.

这似乎是一个相当普遍的问题.你怎么能和杰克逊一起绕过这个限制?

以我的POJO为......

@XmlRootElement
public class Employee implements Serializable {
    private Date lastUpdatedOn;
    private Employee lastUpdatedBy;
    private Integer empId;

    @JoinColumn(nullable=false)
    @OneToOne
    @XmlIDREF
    public Employee getLastUpdatedBy() {
        return createdBy;
    }
    public void setLastUpdatedBy(Employee lastUpdatedBy) {
        this.lastUpdatedBy = lastUpdatedBy;
    }

    @Temporal(TemporalType.TIMESTAMP)
    public Date getLastUpdatedOn() {
        return createdOn;
    }
    public void setLastUpdatedOn(Date lastUpdatedOn) {
        this.lastUpdatedOn = lastUpdatedOn;
    }
    @XmlID
    @XmlJavaTypeAdapter(IntegerAdapter.class)
    public Integer getEmpId() {
        return empId;
    }
    public void setEmpId(Integer empId) {
        this.empId = empId;
    }
}
Run Code Online (Sandbox Code Playgroud)

......以及以下EmployeeResource …

java jax-rs jaxb jersey jackson

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

标签 统计

java ×2

gson ×1

jackson ×1

jax-rs ×1

jaxb ×1

jersey ×1

json ×1