【问题标题】:Max field set size exceeded in Spartacus set-upSpartacus 设置中超出了最大字段集大小
【发布时间】:2021-08-04 12:49:16
【问题描述】:

我正在向 ProductWSDTO 添加一个新字段,并进行必要的添加以在 spartacus 前端使用该字段。但是当我想打开 PDP 时,我收到以下错误。我该如何解决这个问题?

de.hybris.platform.servicelayer.dto.converter.ConversionException:超出最大字段集大小。原因可能是:过于通用的配置,缺乏为数据类正确定义的 BASIC 字段集级别,数据结构的重复性

ERROR [hybrisHTTP8] [RestHandlerExceptionResolver] de.hybris.platform.servicelayer.dto.converter.ConversionException: Max field set size exceeded. Reason of that can be : too generic configuration, lack of properly defined BASIC field set level for data class, reccurency in data structure
at de.hybris.platform.webservicescommons.mapping.impl.DefaultFieldSetBuilder.addToFieldSet(DefaultFieldSetBuilder.java:536)
at de.hybris.platform.webservicescommons.mapping.impl.DefaultFieldSetBuilder.parseField(DefaultFieldSetBuilder.java:522)
at de.hybris.platform.webservicescommons.mapping.impl.DefaultFieldSetBuilder.parseComplexField(DefaultFieldSetBuilder.java:331)
at de.hybris.platform.webservicescommons.mapping.impl.DefaultFieldSetBuilder.createFieldSetInternal(DefaultFieldSetBuilder.java:217)
at de.hybris.platform.webservicescommons.mapping.impl.DefaultFieldSetBuilder.createFieldSetForLevel(DefaultFieldSetBuilder.java:286)
at de.hybris.platform.webservicescommons.mapping.impl.DefaultFieldSetBuilder.createFieldSetInternal(DefaultFieldSetBuilder.java:211)
at de.hybris.platform.webservicescommons.mapping.impl.DefaultFieldSetBuilder.parseField(DefaultFieldSetBuilder.java:517)
at de.hybris.platform.webservicescommons.mapping.impl.DefaultFieldSetBuilder.parseComplexField(DefaultFieldSetBuilder.java:331)
at de.hybris.platform.webservicescommons.mapping.impl.DefaultFieldSetBuilder.parseParametrizedTypeField(DefaultFieldSetBuilder.java:452)
at de.hybris.platform.webservicescommons.mapping.impl.DefaultFieldSetBuilder.parseComplexField(DefaultFieldSetBuilder.java:319)
at de.hybris.platform.webservicescommons.mapping.impl.DefaultFieldSetBuilder.createFieldSetInternal(DefaultFieldSetBuilder.java:217)
at de.hybris.platform.webservicescommons.mapping.impl.DefaultFieldSetBuilder.createFieldSetForLevel(DefaultFieldSetBuilder.java:286)
at de.hybris.platform.webservicescommons.mapping.impl.DefaultFieldSetBuilder.createFieldSetInternal(DefaultFieldSetBuilder.java:211)
at de.hybris.platform.webservicescommons.mapping.impl.DefaultFieldSetBuilder.parseField(DefaultFieldSetBuilder.java:517)
at de.hybris.platform.webservicescommons.mapping.impl.DefaultFieldSetBuilder.parseComplexField(DefaultFieldSetBuilder.java:331)
at de.hybris.platform.webservicescommons.mapping.impl.DefaultFieldSetBuilder.parseParametrizedTypeField(DefaultFieldSetBuilder.java:452)
at de.hybris.platform.webservicescommons.mapping.impl.DefaultFieldSetBuilder.parseComplexField(DefaultFieldSetBuilder.java:319)
at de.hybris.platform.webservicescommons.mapping.impl.DefaultFieldSetBuilder.createFieldSetInternal(DefaultFieldSetBuilder.java:217)
at de.hybris.platform.webservicescommons.mapping.impl.DefaultFieldSetBuilder.createFieldSetForLevel(DefaultFieldSetBuilder.java:286)
at de.hybris.platform.webservicescommons.mapping.impl.DefaultFieldSetBuilder.createFieldSetInternal(DefaultFieldSetBuilder.java:211)
at de.hybris.platform.webservicescommons.mapping.impl.DefaultFieldSetBuilder.parseField(DefaultFieldSetBuilder.java:517)
at de.hybris.platform.webservicescommons.mapping.impl.DefaultFieldSetBuilder.parseComplexField(DefaultFieldSetBuilder.java:331)
at de.hybris.platform.webservicescommons.mapping.impl.DefaultFieldSetBuilder.parseParametrizedTypeField(DefaultFieldSetBuilder.java:452)
at de.hybris.platform.webservicescommons.mapping.impl.DefaultFieldSetBuilder.parseComplexField(DefaultFieldSetBuilder.java:319)
at de.hybris.platform.webservicescommons.mapping.impl.DefaultFieldSetBuilder.createFieldSetInternal(DefaultFieldSetBuilder.java:217)
at de.hybris.platform.webservicescommons.mapping.impl.DefaultFieldSetBuilder.createFieldSetForLevel(DefaultFieldSetBuilder.java:286)
at de.hybris.platform.webservicescommons.mapping.impl.DefaultFieldSetBuilder.createFieldSetInternal(DefaultFieldSetBuilder.java:211)
at de.hybris.platform.webservicescommons.mapping.impl.DefaultFieldSetBuilder.parseField(DefaultFieldSetBuilder.java:517)
at de.hybris.platform.webservicescommons.mapping.impl.DefaultFieldSetBuilder.parseComplexField(DefaultFieldSetBuilder.java:331)
at de.hybris.platform.webservicescommons.mapping.impl.DefaultFieldSetBuilder.parseParametrizedTypeField(DefaultFieldSetBuilder.java:452)
at de.hybris.platform.webservicescommons.mapping.impl.DefaultFieldSetBuilder.parseComplexField(DefaultFieldSetBuilder.java:319)
at de.hybris.platform.webservicescommons.mapping.impl.DefaultFieldSetBuilder.createFieldSetInternal(DefaultFieldSetBuilder.java:217)
at de.hybris.platform.webservicescommons.mapping.impl.DefaultFieldSetBuilder.createFieldSetForLevel(DefaultFieldSetBuilder.java:286)
at de.hybris.platform.webservicescommons.mapping.impl.DefaultFieldSetBuilder.createFieldSetInternal(DefaultFieldSetBuilder.java:211)
at de.hybris.platform.webservicescommons.mapping.impl.DefaultFieldSetBuilder.parseField(DefaultFieldSetBuilder.java:517)
at de.hybris.platform.webservicescommons.mapping.impl.DefaultFieldSetBuilder.parseComplexField(DefaultFieldSetBuilder.java:331)
at de.hybris.platform.webservicescommons.mapping.impl.DefaultFieldSetBuilder.parseParametrizedTypeField(DefaultFieldSetBuilder.java:452)
at de.hybris.platform.webservicescommons.mapping.impl.DefaultFieldSetBuilder.parseComplexField(DefaultFieldSetBuilder.java:319)

【问题讨论】:

  • 我想你忘了为新属性添加字段级映射。
  • 您有一个具有深层或递归的属性。它可能与产品数据或类别数据有关。您需要细化要返回的字段。到目前为止,它实在是太大了。

标签: hybris spartacus-storefront storefront commerce


【解决方案1】:

@雷比亚,

以下是避免上述问题的步骤。

1.定义一个字段映射器来填充ProductWsDTO中的新字段

  1. 在 fieldSetLevelMapping 中添加了新字段:

entry key="BASIC" value="totalPageCount,catalog,totalProductCount,currentPage,products,version,myProperty"

  1. 注入右填充器以填充 WSDTO 中的值。
  2. 您的 DTO 似乎过于复杂,因此请更改此文件。 dto-level-mappings-v2-spring.xml

这里尝试将defaultMaxFieldSetSize改为80k

【讨论】:

  • 您好@Raushan,感谢您的回答,我实施了解决方案,但错误仍然存​​在。
  • 您好@Raushan,感谢您的回答,我实施了解决方案,但错误仍然存​​在。
  • 请分享所有步骤和文件更改,这样很容易理解问题
  • 你好@Raushan,1) xxxfacades-beans.xml 添加新属性,2) xxxocc-beans.xml 添加新属性,3) xxxocc-web-spring.xml 添加新属性,4)app .module.ts 添加新属性,5)我也做了 Populator 类的设置。
  • 我按照你说的添加了这个:
【解决方案2】:

此错误与处理“字段”参数有关:

occ中的映射机制基于Orika mapper。 还有一个额外的过滤器检查当前映射的属性是否在应该映射的属性列表中。该列表是由 fieldSetBuilder(在 dto-level-mappings-v2-spring.xml 中定义)基于类定义和 fieldSetLevelMappings 创建的

 <alias alias="fieldSetBuilder" name="defaultFieldSetBuilder"/>
     <bean id="defaultFieldSetBuilder"
           class="de.hybris.platform.webservicescommons.mapping.impl.DefaultFieldSetBuilder">
         <property name="defaultRecurrencyLevel" value="4"/>
         <property name="defaultMaxFieldSetSize" value="50000"/>
         <property name="fieldSetLevelHelper" ref="fieldSetLevelHelper"/>
     </bean>

有两个参数会影响字段集构建器的工作方式:

  • defaultRecurrencyLevel
  • defaultMaxFieldSetSize - 如果超出限制,则会引发异常 - 这是您看到的异常。 看起来您尝试执行的请求 - 响应 dto 太复杂 验证是否正确定义了该 dto 类的 fieldsSetMapping。

如果您未在请求中指定任何字段属性 - 值取自 DEFAULT fieldSetLevelMapping。 尝试为您的调用指定 fields 属性并验证您是否仍然遇到该异常。

查看 SAP 社区中的 thread 了解详情。

最好的问候, 杰瑞

【讨论】:

    猜你喜欢
    • 2020-06-24
    • 2017-07-02
    • 2013-08-23
    • 2021-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多