Spring中@RequestParam绑定含Map属性对象的正确查询串格式
Spring Get请求中Map<Enum,String>类型参数的正确查询串格式
正确的查询串格式
直接使用方括号包裹枚举常量名的格式即可:additionalConstraints[EMAIL]=test
关键注意事项
- 严格匹配枚举常量名称:Spring绑定Map的枚举键时,会直接匹配枚举的
name()值(也就是你定义枚举时的常量名,比如EMAIL),大小写必须完全一致,不能写成email或Email,否则无法识别。 - 确保字段有正确的getter/setter:你的
Example类中additionalConstraints字段必须提供对应的getAdditionalConstraints()和setAdditionalConstraints()方法,或者用Lombok的@Data/@Getter/@Setter注解自动生成,Spring依赖这些方法完成参数注入。 - 自定义枚举映射的特殊处理:如果你的枚举类用
@JsonValue指定了自定义的序列化值(比如把EMAIL映射为email_type),那查询串里的键要换成这个自定义值,比如additionalConstraints[email_type]=test。
控制器方法示例
如果是直接接收Example对象参数,控制器方法可以这么写:
@GetMapping("/your-endpoint") public ResponseEntity<Example> handleRequest(Example example) { // 业务逻辑 return ResponseEntity.ok(example); }
如果需要单独拆分参数接收,也可以显式声明@RequestParam:
@GetMapping("/your-endpoint") public ResponseEntity<Example> handleRequest( @RequestParam boolean taxFree, @RequestParam String email, @RequestParam Map<YourEnumType, String> additionalConstraints ) { Example example = new Example(); example.setTaxFree(taxFree); example.setEmail(email); example.setAdditionalConstraints(additionalConstraints); return ResponseEntity.ok(example); }
内容的提问来源于stack exchange,提问作者Rolf Rüdiger
相关产品推荐
相关产品推荐

