当前位置: 首页 > 知识库问答 >
问题:

Spring SpEL--创建字符串和自定义对象映射的表达式语言

空正豪
2023-03-14
sub.region.data={\
    AF: {'subRegionCd' : '34', 'subRegionName' : 'Southern Asia', 'subRegionDesc': '', 'status' : 'A'} \
}
@Value("#{${sub.region.data}}")
private Map<String, SubRegion> subRegionsMap; 
public class SubRegion {
    private String subRegionCd;
    private String subRegionName;
    private String subRegionDesc;
    private String subRegionStatus;
}
Caused by: org.springframework.beans.ConversionNotSupportedException: Failed to convert value of type 'java.util.Collections$UnmodifiableMap' to required type 'java.util.Map'; nested exception is java.lang.IllegalStateException: Cannot convert value of type 'java.util.Collections$UnmodifiableMap' to required type 'com.xxxxxx.model.SubRegion': no matching editors or conversion strategy found
    at org.springframework.beans.TypeConverterSupport.convertIfNecessary(TypeConverterSupport.java:76) ~[spring-beans-5.1.5.RELEASE.jar:5.1.5.RELEASE]
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1195) ~[spring-beans-5.1.5.RELEASE.jar:5.1.5.RELEASE]
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1167) ~[spring-beans-5.1.5.RELEASE.jar:5.1.5.RELEASE]
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:593) ~[spring-beans-5.1.5.RELEASE.jar:5.1.5.RELEASE]
    ... 54 common frames omitted
Caused by: java.lang.IllegalStateException: Cannot convert value of type 'java.util.Collections$UnmodifiableMap' to required type 'com.xxxxxx.model.SubRegion': no matching editors or conversion strategy found
    at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:262) ~[spring-beans-5.1.5.RELEASE.jar:5.1.5.RELEASE]
    at org.springframework.beans.TypeConverterDelegate.convertToTypedMap(TypeConverterDelegate.java:608) ~[spring-beans-5.1.5.RELEASE.jar:5.1.5.RELEASE]
    at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:182) ~[spring-beans-5.1.5.RELEASE.jar:5.1.5.RELEASE]
    at org.springframework.beans.TypeConverterSupport.convertIfNecessary(TypeConverterSupport.java:73) ~[spring-beans-5.1.5.RELEASE.jar:5.1.5.RELEASE]
    ... 57 common frames omitted

共有1个答案

茅曾琪
2023-03-14

看来您在'sub regiondesc'和之后犯了一个错误,我想您的意思是使用冒号,而不是逗号

对于spring boot,我建议您使用ConfigurationProperties,而不是@value

例如,在这种情况下,您必须:

@ConfigurationProperties(prefix = "sub.region")
public static class SubRegionConfig {
    private Map<String, SubRegion> data;
    //getters and setters
} 
sub:
  region:
   data:
     AF:
      subRegionCd: '34'
      subRegionName: 'Southern Asia'
      subRegionDesc: ''
      subRegionStatus: 'A'
@Autowired
private SubRegionConfig subRegionConfig;
 类似资料:
  • 问题内容: 考虑此类: 默认的字符串表示形式如下所示: 如何使它显示自定义字符串? 问题答案: 在类的元类中实现或。 使用,如果你说的是可读的字串,使用了明确的表示。

  • 问题内容: 我想创建一个字符串映射到实例。这是正确的方法吗? 问题答案: 每当我想使用A时,我都发现切片是正确的选择,例如

  • 问题内容: 我有采用SQL where子句的函数,我想知道是否有一种方法可以使它们全部成为强类型。有没有办法采用lambda表达式,例如=> a.AgencyID == id并将其转换为字符串where子句?就像“ AgencyID =’idValue’”一样? 谢谢! 问题答案: 您可以将lambda函数转换为表达式树,然后遍历该树以构建您的字符串。

  • 我有一个用例,其中我需要维护两组JSON输出,一组具有JSON属性的漂亮名称,另一组没有。所以我决定自定义ObjectMapper,以便它忽略字段上的@JSONProperty(“pretty name”)注释,而使用字段属性名。在本例中,希望得到以下JSON输出 具有漂亮名称的JSON输出如下所示 我的ObjectMapper配置代码如下所示 我看了一些其他的答案,但对我不起作用。我得到了一个N