我需要分解我的传入JSON字段在我的REST控制器与Spring Boot。
我的请求正文:
{
"text": "my text",
"myEnum": "VALUE1"
}
我的控制器:
@PatchMapping("/{id}")
Object updateEntity(@PathVariable Long id, String text, MyEnum myEnum) {
/* ... */
}
@RequestParam
不工作,因为它只是查询字符串参数,@RequestBody
也不工作,因为它处理整个身体。但我需要分解传入体的领域和注入到控制器。我知道我可以为此使用Map <String, String>
,但我想验证我的传入字段,并且我有不同类型的字段。我不想为每个控制器创建一个传入主体的类
如果我没有误解您的要求,处理传入JSON的通常方法是定义一个反映预期输入的类,并将控制器方法参数注释为RequestBody。
Spring Boot默认使用Jackson来反序列化到你的类,所以如果你使用匹配的属性名,那么你不需要任何特殊的注释或设置。我认为默认情况下会处理枚举,就像其他类型一样(尽管您可能需要为表示日期或时间戳的字符串提供一些指导)。任何坏值都将导致反序列化失败,我认为您可以在ControllerAdvice中处理(尽管您需要仔细检查)