无法使用 post 请求反序列化枚举值

问题描述

假设我有一个枚举类:

    enum class Foo(val type: String) {
        DEFAULT("default"),OTHER("other")
    }

还有一个获取请求:

    @field:QueryValue("foo",defaultValue = "DEFAULT")
    @field:Nullable
    var foo: Foo = Foo.DEFAULT

这将正确序列化作为 foo: defaultfoo: other 传入的参数

但是,对于发布请求:

    @Body
    @field:Nullable
    var foo: Foo = Foo.DEFAULT

如果我发布了 { "foo": "default" }{ "foo": "other" } 的 json 正文

我会得到一个错误

Failed to convert argument [p0] for value [null] due to: Cannot deserialize value of type `Foo` from String \"default\": not one of the values accepted for Enum class: [DEFAULT,OTHER]\n at [Source: UNKNowN; line: -1,column: -1] ...

这里的任何帮助将不胜感激!我不确定这是故意的还是会被视为错误。附带说明一下,是否有可以将字段大写的注释? (因为 foo: DEFAULTfoo: OTHER 是有效的)

解决方法

此处的这篇文章详细介绍了如何解决此问题: https://github.com/micronaut-projects/micronaut-core/issues/1830

引用:

import 'package:dcli/dcli.dart';
import 'package:test/test.dart';

    expect(
        () => copy(from,to),throwsA(predicate((e) =>
            e is CopyException &&
            e.message == 'The from file ${truepath(from)} does not exists.')));