小编Lor*_*ius的帖子

如何在@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
查看次数

如何将JSON反序列化为具有必需字段但可以包含多个未知字段的Java类?

我有一个输入JSON,其中包含我确定里面的字段。但是,我需要灵活地添加几个额外的字段。我不知道其他字段的名称,但是我必须处理它。

我在考虑添加一个MaP字段,其中包含所有其他字段,但是输入未映射到该字段。

我想在Dropwizard端点中反序列化JSON。

有没有办法和杰克逊有关?

例:

JSON有效负载1:

{
  "first_name": "John",
  "last_name": "Doe",
  "date_of_birth": "01/01/1990",
  "postcode": "1234"
}
Run Code Online (Sandbox Code Playgroud)

JSON有效负载2:

{
  "first_name": "Alice",
  "last_name": "Havee",
  "phone_no": 012345678,
  "passport_no": "AB 123456"
}
Run Code Online (Sandbox Code Playgroud)

稍后,JSON有效负载3甚至可以具有不同的字段。

Java DTO:

public class PersonDTO {

    // mandatory field
    private String firstName;

    // mandatory field
    private String lastName;

    // Unknown optional fields?

    // No args constructor
    // Getters
    // Setters
}
Run Code Online (Sandbox Code Playgroud)

java json jackson dropwizard

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

标签 统计

jackson ×2

java ×2

dropwizard ×1

enums ×1

json ×1

kotlin ×1

spring-boot ×1