Spring boot 如何动态接受不同类类型的RequestBody
我用的是弹簧靴。编写RESTAPI 其中,对于相同的api url,请求json结构不同 我们有什么方法可以应用工厂设计或其他东西吗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
@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类吗