相关疑难解决方法(0)

如何在@RequestBody 中自定义将字符串转换为枚举?

我想发送一个 JSON 请求正文,其中字段可以是枚举值。这些枚举值以驼峰命名,但枚举值为 UPPER_SNAKE_CASE。

Kotlin 类:

data class CreatePersonDto @JsonCreator constructor (
        @JsonProperty("firstName") val firstName: String,
        @JsonProperty("lastName") val lastName: String,
        @JsonProperty("idType") val idType: IdType
)
Run Code Online (Sandbox Code Playgroud)
enum class IdType {
    DRIVING_LICENCE,
    ID_CARD,
    PASSPORT;
}
Run Code Online (Sandbox Code Playgroud)

我的端点签名:

@PostMapping
fun createPerson(@RequestBody person: CreatePersonDto)
Run Code Online (Sandbox Code Playgroud)

HTTP请求:

curl -d '{ "firstName": "King", "lastName": "Leonidas", "idType": "drivingLicence" }' -H "Content-Type: application/json" -X POST http://localhost:8080/person
Run Code Online (Sandbox Code Playgroud)

我想隐式地将“drivingLicence”转换为 DRIVING_LICENCE。

我试过了:

  • org.springframework.core.convert.converter.Converter: 它适用于@RequestParam,但不适用于@RequestBody
  • org.springframework.format.Formatter: 我注册了这个格式化程序,但是当我发出请求时,parse()方法没有执行。

到目前为止我的配置:

@Configuration
class WebConfig : WebMvcConfigurer {

    override fun addFormatters(registry: …
Run Code Online (Sandbox Code Playgroud)

java enums jackson kotlin spring-boot

7
推荐指数
1
解决办法
2843
查看次数

杰克逊字段值没有引号

是否有注释或其他方式告诉Jackson序列化String变量的值而不带引号.序列化程序应仅序列化一个字段的值而不带引号.

我正在寻找类似于以下内容的回报:

{"name": "nameValue", "click" : function (e){console.log("message");}}
Run Code Online (Sandbox Code Playgroud)

代替

{"name": "nameValue", "click" : "function (e){console.log("message");}"}
Run Code Online (Sandbox Code Playgroud)

以上是外部java脚本库如何需要数据,因此如果没有办法,我必须在Object Mapper将其转换为JSON后手动更改字符串.

java json annotations jackson

5
推荐指数
2
解决办法
7165
查看次数

如果枚举映射键为空或未知,则忽略 JSON 反序列化

我正在尝试使用 Jackson 将 JSON 反序列化为 Java POJO。Json 看起来像

"foo": {
    "one": {
        "a":1,
        "b":"string"
    }
    "three":{
        "a":2
        "b":"another"
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

我想反序列化的类有这个字段:

public class Myclass {

    private Map<MyEnum, MyPojo> foo;

    //setter and getter

    public static MyPojo {
        private int a;
        private String b;
    }
}
Run Code Online (Sandbox Code Playgroud)

我的枚举类型如下所示:

public enum MyEnum {
    one("data1"),two("data2")

    @JsonValue
    String data;

    EnumAttrib(String data) {
       this.data = data;
    }

    private static Map<String, MyEnum> ENUM_MAP = new HashMap();
    static {
        for (MyEnum a: MyEnum.values()) {
            ENUM_MAP.put(a.data, a);
        }
    } …
Run Code Online (Sandbox Code Playgroud)

java json jackson jackson-databind

4
推荐指数
1
解决办法
2968
查看次数