如何在 spring 控制器中允许 POST 列表或映射为 JSON



我有一个@PostMapping,允许用户发送一个普通的json地图,比如:

{
   "firstname": "john",
   "lastname": "doh"
}

Servlet:

@RestController 
public class PersonController {
   @PostMapping("/generic")
   public void post(Map<String, String> params) {
   }
}

这工作正常。但是现在我还想接受同一端点上的对象列表。但是我不能只添加另一个采用不同参数的方法。因为春天抱怨映射模棱两可:

   @PostMapping("/generic")
   public void post2(List<Map<String, String>> params) {
   }

问:如何接受既可以是Map又可以是Listjson数据?如果输入是映射/列表,我可以稍后有条件地继续使用业务代码。但是,我怎么能在弹簧控制器中并排接受它们呢?

@PostMapping
public void post(JsonNode json) {
    if (json.isObject()) {
        Map<String, String> map = mapper.convertValue(json, Map.class);
    } else if (json.isArray()) {
        List<Map<String, String>> list = mapper.convertValue(json, List.class);
    }
}

最新更新