您可以将有效载荷作为Map<K,V>
接收,并使用ObjectMapper
对其进行反序列化。
@RestController
@RequestMapping(path = "/my-rest-api")
public class MyController {
@Autowired
ClassAValidator classAValidator; // assuming you wrote an validator
@Autowired
ClassBValidator classBValidator; // assuming you wrote an validator
@PostMapping("/{parameter}")
public ResponseEntity<Object> handleRequest(
@PathVariable("parameter") String parameter,@RequestBody Map<Object,Object> request,BindingResult result) {
ObjectMapper mapper = new ObjectMapper();
if (parameter.equals("X")) {
ClassA classA = mapper.convertValue(request,ClassA.class);
classAValidator.validate(classA,result);
if(result.hasErrors()) {
throw new CustomException(result);
}
} else if (parameter.equals("Y")) {
ClassB classB = mapper.convertValue(request,ClassB.class);
classBValidator.validate(classB,result);
if(result.hasErrors()) {
throw new CustomException(result);
}
} else {
// ..
}
return ResponseEntity.ok("Ok");
}
}
,
我认为这是一个更简单的解决方案:
@RestController
@RequestMapping("/my-custom-url")
public class MyController {
@PostMapping("/param1")
public ResponseEntity<Object> handleClassA(
@Valid @RequestBody ClassA classA,BindingResult result) {
...
return ResponseEntity.ok("Ok");
}
@PostMapping("/param2")
public ResponseEntity<Object> handleClassB(
@Valid @RequestBody ClassB classB,BindingResult result) {
...
return ResponseEntity.ok("Ok");
}
}
,
我不确定为什么上面的答案解释了验证器。据我了解,您正在尝试根据条件返回两种类型的响应。这是不可能的。因为返回类型在编译时有效。因此,如果将返回类型设置为classA,则必须返回classA。您不能返回classB。 (除非classB是classA关系),所以如果您确实想执行此操作,则可以使用名称接口来强制类型。
@GetMapping(value = "/{id}")
public Response getRent(@PathVariable int id,@RequestParam(required = false) String type) {
if(type=="A"){
return new ClassA(rentService.findById(id));
}else{
return new ClassB (rentService.findDetailResponse(id));
}
}
P.S:您可能需要将其返回为
public ResponseEntiry<Response>
但是我只是直接使用Response。
现在您需要从同一接口创建这两个类
public interface Response {
}
public class ClassA implements Response {
// your code goes here
}
public class ClassB implements Response {
// code here
}
通过这种方式,您可以实现自己的尝试。
本文链接:https://www.f2er.com/3159481.html