Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.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
Spring boot 如何动态接受不同类类型的RequestBody_Spring Boot - Fatal编程技术网

Spring boot 如何动态接受不同类类型的RequestBody

Spring boot 如何动态接受不同类类型的RequestBody,spring-boot,Spring Boot,我用的是弹簧靴。编写RESTAPI 其中,对于相同的api url,请求json结构不同 我们有什么方法可以应用工厂设计或其他东西吗 @RequestMapping(value = "/myservice/{type}", method = RequestMethod.POST) @ResponseBody public ResponseEntity<?> myServiceApi(@PathVariable String type, @RequestBody

我用的是弹簧靴。编写RESTAPI 其中,对于相同的api url,请求json结构不同 我们有什么方法可以应用工厂设计或其他东西吗

    @RequestMapping(value = "/myservice/{type}", method = RequestMethod.POST)
@ResponseBody
public ResponseEntity<?> myServiceApi(@PathVariable String type,
        @RequestBody SomeClass1 somereq) {
    // here based on type , the RequestBody can be either SomeClass1 or SomeClass2 
    // both the SomeClass1 and SomeClass2 has nothing in common .

}
@RequestMapping(value=“/myservice/{type}”,method=RequestMethod.POST)
@应答器
公共响应属性myServiceApi(@PathVariable字符串类型,
@RequestBody SomeClass1 somereq){
//在这里,根据类型,RequestBody可以是SomeClass1或SomeClass2
//SomeClass1和SomeClass2都没有共同点。
}

只有当请求json是SomeClass1格式时,上面的代码才能工作,但我需要它在{SomeClass1,SomeClass2}

中接受,您可以通过将json作为字符串传递到控制器方法中,然后将其映射到您期望需要的任何对象来实现:

@PostMapping(value=“/myservice/{type}”)
公共响应属性myServiceApi(@PathVariable字符串类型,
@RequestBody字符串(somereq){
ObjectMapper mapper=新的ObjectMapper();
如果(){
SomeClass1 SomeClass1=mapper.readValue(somereq,SomeClass1.class);
}如果(){
SomeClass2 SomeClass2=mapper.readValue(somereq,SomeClass2.class);
}
}

尽管说实话,如果你真的希望实体具有完全不同的结构,我的建议是对这些实体进行单独的API调用。

请添加明确的解释我是springboot新手,我是否必须创建两个DTO来处理一类请求以接受{name:some,userId:123}以及我是否接受{name:some,userId:123,phone_no:99XXXX}或者我可以有一个DTO类吗