【问题标题】:ObjectMapper fails to write a list of values as stringObjectMapper 无法将值列表写入字符串
【发布时间】:2020-07-05 10:09:42
【问题描述】:

我有一个表 commandeClient,其中包含一个带有注释 json 的列表 ligneCommandesClients 忽略列表 ligneCommandeCLients

    @Entity
public class CommandeClient implements Serializable {

    @Id
    @GeneratedValue
    private Long idCdeClient;

    private String codeCommande;
    @Temporal(TemporalType.TIME)
    private Date date;

    @OneToMany(mappedBy="commandeClient")
    private List<LigneCommandeClient>ligneCommandeClients;


    @JsonIgnore
    public List<LigneCommandeClient> getLigneCommandeClients() {
        return ligneCommandeClients;
    }

}

这里是实体 LigneCommandeClient

@Entity
public class LigneCommandeClient implements Serializable {

    @Id
    @GeneratedValue
    private Long idLigneCommandeClient;

    private BigDecimal qty;

    private BigDecimal prixUnitaire;

    @ManyToOne
    @JoinColumn(name="idArticle")
    private Article article;

    @ManyToOne
    @JoinColumn(name="idCdeClient")
    private CommandeClient commandeClient;

在我的 jsp 中,我添加了一个 jquery 函数来加载 JSon 格式的 listCommandeClient,并使用调用以下方法的 onclick 事件

@Transient
    public String getLigneCommandeJSON() {

        if(!ligneCommandeClients.isEmpty()){

                ObjectMapper mapper = new ObjectMapper();
                try {
                    return mapper.writeValueAsString(ligneCommandeClients);
                } catch (JsonGenerationException e) {
                    e.printStackTrace();
                } catch (JsonMappingException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }

        }
        return "";
    }

但是在执行以下指令将列表转换为 json 对象时

return mapper.writeValueAsString(ligneCommandeClients);

我一直重复这个错误,没有根本原因(删除了这个错误的重复次数)

    at org.codehaus.jackson.map.ser.ContainerSerializers$CollectionSerializer.serializeContents(ContainerSerializers.java:360)
    at org.codehaus.jackson.map.ser.ContainerSerializers$CollectionSerializer.serializeContents(ContainerSerializers.java:312)
    at org.codehaus.jackson.map.ser.ContainerSerializers$AsArraySerializer.serialize(ContainerSerializers.java:111)
    at org.codehaus.jackson.map.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:268)
    at org.codehaus.jackson.map.ser.BeanSerializer.serializeFields(BeanSerializer.java:146)
    at org.codehaus.jackson.map.ser.BeanSerializer.serialize(BeanSerializer.java:118)
    at org.codehaus.jackson.map.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:268)
    at org.codehaus.jackson.map.ser.BeanSerializer.serializeFields(BeanSerializer.java:146)
    at org.codehaus.jackson.map.ser.BeanSerializer.serialize(BeanSerializer.java:118)
    at org.codehaus.jackson.map.ser.ContainerSerializers$CollectionSerializer.serializeContents(ContainerSerializers.java:360)
    at org.codehaus.jackson.map.ser.ContainerSerializers$CollectionSerializer.serializeContents(ContainerSerializers.java:312)
    at org.codehaus.jackson.map.ser.ContainerSerializers$AsArraySerializer.serialize(ContainerSerializers.java:111)
    at org.codehaus.jackson.map.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:268)
    at org.codehaus.jackson.map.ser.BeanSerializer.serializeFields(BeanSerializer.java:146)
    at org.codehaus.jackson.map.ser.BeanSerializer.serialize(BeanSerializer.java:118)
    at org.codehaus.jackson.map.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:268)
    at org.codehaus.jackson.map.ser.BeanSerializer.serializeFields(BeanSerializer.java:146)
    at org.codehaus.jackson.map.ser.BeanSerializer.serialize(BeanSerializer.java:118)
    at org.codehaus.jackson.map.ser.ContainerSerializers$CollectionSerializer.serializeContents(ContainerSerializers.java:360)
    at org.codehaus.jackson.map.ser.ContainerSerializers$CollectionSerializer.serializeContents(ContainerSerializers.java:312)

知道如何解决此错误 提前致谢

【问题讨论】:

  • 这是一个英文网站,请用英文询问您的完整问题,s'il vous plaît。还要包括异常的根本原因,是StackOverflowError吗?
  • @Kayaman 完成,感谢您的澄清
  • 是的,问题已解决,非常感谢

标签: java json spring jsp


【解决方案1】:

在相同的上下文中,Category 类包含一个文章列表,但是,即使我在 getArticles 上添加注释 @IgnoreJson,我仍然会收到延迟初始化错误,如下所示:

org.codehaus.jackson.map.JsonMappingException: 延迟初始化角色集合失败:com.stock.mvc.model.Category.articles 在 org.codehaus.jackson.map.JsonMappingException.wrapWithPath(JsonMappingException.java:214) 在 org.codehaus.jackson.map.JsonMappingException.wrapWithPath(JsonMappingException.java:179) 在 org.codehaus.jackson.map.ser.SerializerBase.wrapAndThrow(SerializerBase.java:97) 在 org.codehaus.jackson.map.ser.BeanSerializer.serializeFields(BeanSerializer.java:150) 在 org.codehaus.jackson.map.ser.BeanSerializer.serialize(BeanSerializer.java:118) 在 org.codehaus.jackson.map.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:268) 在 org.codehaus.jackson.map.ser.BeanSerializer.serializeFields(BeanSerializer.java:146) 在 org.codehaus.jackson.map.ser.BeanSerializer.serialize(BeanSerializer.java:118) 在 org.codehaus.jackson.map.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:268) 在 org.codehaus.jackson.map.ser.BeanSerializer.serializeFields(BeanSerializer.java:146) 在 org.codehaus.jackson.map.ser.BeanSerializer.serialize(BeanSerializer.java:118) 在 org.codehaus.jackson.map.ser.ContainerSerializers$IndexedListSerializer.serializeContents(ContainerSerializers.java:236) 在 org.codehaus.jackson.map.ser.ContainerSerializers$IndexedListSerializer.serializeContents(ContainerSerializers.java:189) 在 org.codehaus.jackson.map.ser.ContainerSerializers$AsArraySerializer.serialize(ContainerSerializers.java:111) 在 org.codehaus.jackson.map.ser.StdSerializerProvider._serializeValue(StdSerializerProvider.java:296) 在 org.codehaus.jackson.map.ser.StdSerializerProvider.serializeValue(StdSerializerProvider.java:224) 在 org.codehaus.jackson.map.ObjectMapper._configAndWriteValue(ObjectMapper.java:1512) 在 org.codehaus.jackson.map.ObjectMapper.writeValueAsString(ObjectMapper.java:1262) 在 com.stock.mvc.model.CommandeClient.getLigneCommandeJSON(CommandeClient.java:112) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:498) 在 javax.el.BeanELResolver.invoke(BeanELResolver.java:165)

【讨论】:

    猜你喜欢
    • 2020-09-12
    • 1970-01-01
    • 1970-01-01
    • 2016-08-29
    • 1970-01-01
    • 1970-01-01
    • 2016-06-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多