使用SpringMVC将传入的JSON按字段分解为对象

使用SpringMVC将传入的JSON按字段分解为对象,spring,spring-boot,spring-mvc,jackson,spring-rest,Spring,Spring Boot,Spring Mvc,Jackson,Spring Rest,我需要用Spring Boot将传入的JSON按me REST控制器中的字段进行分解 我的请求机构: { “文本”:“我的文本”, “myEnum”:“VALUE1” } 和我的控制器: @PatchMapping(“/{id}”) 对象更新属性(@PathVariable Long id,字符串文本,MyEnum MyEnum){ /* ... */ } @RequestParam不起作用,因为它只用于查询字符串参数,@RequestBody也不起作用,因为它处理整个主体。但我需要通过场分

我需要用Spring Boot将传入的JSON按me REST控制器中的字段进行分解

我的请求机构:

{
“文本”:“我的文本”,
“myEnum”:“VALUE1”
}
和我的控制器:

@PatchMapping(“/{id}”)
对象更新属性(@PathVariable Long id,字符串文本,MyEnum MyEnum){
/* ... */
}

@RequestParam
不起作用,因为它只用于查询字符串参数,
@RequestBody
也不起作用,因为它处理整个主体。但我需要通过场分解进入的身体并注入控制器。我知道我可以为此使用
Map
,但是我想验证我的传入字段,并且我有不同类型的字段。我不想通过每个控制器的传入主体创建一个类。

如果我没有误解您的要求,处理传入JSON的通常方法是定义一个反映预期输入的类,并将控制器方法参数注释为RequestBody


默认情况下,SpringBoot使用Jackson对类进行反序列化,因此如果使用匹配的属性名,则不需要任何特殊的注释或设置。我认为默认情况下将处理枚举,其他类型也是如此(尽管您可能需要为表示日期或时间戳的字符串提供一些指导)。任何错误的值都会导致反序列化失败,我认为您可以在ControllerAdvice中处理(尽管您需要再次检查)

是的,我知道,但我不想通过传入的主体为每个controllerOh创建一个类,我理解,不确定在不查阅文档的情况下是否可以这样做,但我们怀疑,单独的类就像在每个控制器方法中定义一个分解的属性列表一样简单。如果您使用Lombok(或Kotlin),那么您就不需要这些小型数据持有者类的所有样板代码。是的,我知道,我也可以使用java记录,但可能存在其他方式。哦,当然,我仍然坚持使用java 8!希望有人带着分解的解决方案回来。如果以后有机会,我会四处看看,但现在正在工作。