我正在使用Spring Boot。编写REST API
对于相同的api网址,请求json结构有所不同
有什么方法可以应用Factory设计或其他方法
@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 .
}
上面的代码仅在请求json为SomeClass1格式时才有效,但是我需要它在{SomeClass1,SomeClass2}中接受
最佳答案
您可以通过将JSON作为字符串传递到控制器方法中,然后将其映射到所需的任何对象来实现:
@PostMapping(value = "/myservice/{type}")
public ResponseEntity<?> myServiceApi(@PathVariable String type,
@RequestBody String somereq) {
ObjectMapper mapper = new ObjectMapper();
if (<something that indicates SomeClass1>) {
SomeClass1 someClass1 = mapper.readValue(somereq, SomeClass1.class);
} else if (<something that indicates SomeClass2>) {
SomeClass2 someClass2 = mapper.readValue(somereq, SomeClass2.class);
}
}
虽然说实话,如果您确实期望结构完全不同的主体,我的建议是仅对这些主体进行单独的API调用。