Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何允许在spring控制器中以JSON的形式发布列表或映射?_Java_Json_Spring_Spring Mvc_Spring Web - Fatal编程技术网

Java 如何允许在spring控制器中以JSON的形式发布列表或映射?

Java 如何允许在spring控制器中以JSON的形式发布列表或映射?,java,json,spring,spring-mvc,spring-web,Java,Json,Spring,Spring Mvc,Spring Web,我有一个@PostMapping,允许用户发送一个普通的json映射,如: { "firstname": "john", "lastname": "doh" } Servlet: @RestController public class PersonController { @PostMapping("/generic") public void post(Map<String, String> params) { } } @RestControl

我有一个
@PostMapping
,允许用户发送一个普通的
json
映射,如:

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

@RestController 
public class PersonController {
   @PostMapping("/generic")
   public void post(Map<String, String> params) {
   }
}
@RestController
公共类个人控制器{
@后映射(“/通用”)
公共作废帖子(地图参数){
}
}
这个很好用。但现在我想接受同一端点上的对象列表。但我不能仅仅添加另一个采用不同参数的方法。因为spring抱怨映射不明确:

   @PostMapping("/generic")
   public void post2(List<Map<String, String>> params) {
   }
@PostMapping(“/generic”)
公共无效post2(列表参数){
}
问题:我如何接受既可以是
映射
又可以是
列表
json
数据?如果输入是map/list,我可以有条件地继续使用业务代码。但是我怎么能在spring控制器中同时接受它们呢?

@PostMapping
@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);
    }
}
公共void post(JsonNode json){ if(json.isObject()){ Map Map=mapper.convertValue(json,Map.class); }else if(json.isArray()){ List=mapper.convertValue(json,List.class); } }
为什么在同一个端点上?如果控制客户机,则可能要求所有请求都必须是列表,即使其中包含一个元素。此外,我不会只发送一张地图,而是选择一个强类型的DTO(我会为单个对象和DTO列表创建单独的端点)。好吧,你肯定能很快获得向下投票……对我来说,为什么总是很重要,我来这里不仅仅是为了回答人们的问题,比如某种支付过高的机器人。根据我的经验,我还可以告诉你,虽然“通用系统”的想法通常很吸引人,但它通常会导致一些可怕的事情,比如。在这里我并没有这样说,但我有很多不好的经历,人们试图“无代码”并产生可怕的结果。换句话来说,你的问题是:“我想要一个红色和蓝色同时出现的正方形。”也许你的问题是,你已经解决(或认为你已经解决)了一半的问题,并且需要帮助解决另一半的问题。也许最好了解整个问题,是的,“为什么”确实很重要。为什么不使用
@PostMapping
作为
@PostMapping(value=“/generic”,params=“unique identifier”)
在不同的方法上使用不同的“unique identifier”