我正在使用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调用。

09-15 14:15