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

Micronaut无法加载和使用我的'TypeConverter'实现

郏经纬
2023-03-14

我有一个控制器方法,它接受一个POJO。

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor

public class Dto {    
    private LocalDate endDate;
    private String token;
    private TransactionType type;   
}
@Slf4j
@Controller("/api/transactions")
public class IssuerTransactionController {
    @Get(value = "/{?tr*}", produces = APPLICATION_JSON)
    public List<String> get(Dto tr) {
        return new ArrayList<>();
    }
}
@Slf4j
@Singleton
public class TransactionTypeConverter implements TypeConverter<String, TransactionType> {
    @Override
    public Optional<TransactionType> convert(String value, Class<TransactionType> targetType, ConversionContext context) {
        return Arrays.stream(TransactionType.values())
                .filter(txnType -> StringUtils.equals(txnType.getTransactionType(), value) || StringUtils.equals(txnType.name(), value))
                .findFirst();
    }
}

如果我将它作为常规依赖项添加到控制器中,它将被加载(这并不奇怪),但仍然没有被使用。我是不是漏掉了一步?

共有1个答案

闻慎之
2023-03-14

似乎您正在使用绑定from Multiple Query values功能,它实际上只是创建传入的查询参数的映射,并使用Jackson将映射转换为您自己的POJO。因此,它不依赖于系统转换器,而只依赖于杰克逊本身。您所能做的就是使用Jacksons@jsoncreator注释来定制会话。

像这样的东西应该管用。

public enum TransactionType {
    A ("A"),
    B ("B");

    private final String transactionType;

    TransactionType(String transactionType){
        this.transactionType = transactionType;
    }

    public String getTransactionType() {
        return transactionType;
    }

    @JsonCreator
    public static TransactionType forValue(Collection<String> values) {           
        if(values == null || values.isEmpty()){
            return null;
        }
        String value = values.get(0);
        return Arrays.stream(TransactionType.values())
            .filter(txnType -> StringUtils.equals(txnType.getTransactionType(), value) || StringUtils.equals(txnType.name(), value))
            .findFirst().orElse(null);
    }
}
 类似资料:
  • 在使用spring security和Thymeleaf时,我无法加载我的css文件。 每当我使用rel=“stylesheet”时,它都会给我带来严格的MIME启用错误。 我的Spring安全代码:

  • 我已经创建了一个Micronaut(在Kotlin中)来将映射转换为cron字符串,用于,但是我无法让Micronaut进行转换。 作为一个示例,我希望支持以下配置: 我还创建了一个@PropertiesConfiguration类,将这个属性定义为一个字符串(我想这是告诉Micronaut该属性实际上是什么类型所必需的),并将它注入到一个bean中,以确保使用了所有内容(只是为了确保,它没有什么

  • 我来自Grails背景,最近在Micronaut使用GORM启动了一个项目。 我有以下代码: 应用程序编译和启动没有问题,但当我尝试访问url http:localhost:8080/author时,我收到以下错误: 10:25:29.431[nioEventLoopGroup-1-2]错误i.m.h.s.netty。RoutingInBoundHandler-发生意外错误:将对象[[micron

  • 我想用cdn的axios 但是我得到了一个错误:拒绝加载脚本的https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js'因为它违反了以下内容安全策略指令:“script src'self'”。请注意,未显式设置“script src elem”,因此将“script src”用作回退。

  • 我有一个属性文件: 当我启动应用程序显示此错误: 我将p12复制到另一个文件夹(/mnt/d/KeyStores/): 我使用以下方法进行测试:密钥库:/mnt/d/密钥库/密钥库.p12 密钥库: D:\密钥库\密钥库.p12 密钥存储:文件:/mnt/d/KeyStores/keystory.p12 密钥存储:文件:D:\KeyStores\keystore. p12 密钥库:file:///

  • 问题内容: 我正在尝试从“远程”网站获取一些json数据。我在99000端口上运行Web服务,然后在99001端口上启动网站(http:// localhost:99001 / index.html)。 我收到以下消息: 即使以HTML文件启动网页,我也会得到以下信息: Web服务返回数据。我尝试捕获这样的数据项: 我正在尝试获得以下结构: 您知道我为什么会收到此错误吗? 问题答案: 您无法执行X