我有一个要求,我需要根据路径变量将请求主体映射到特定的子类。请求正文本身不包含任何关于选择哪个子类的信息。
@ApiOperation(value = "Update Developer (dev)",
response = ResponseEntity.class)
@RequestMapping(method = RequestMethod.PATCH,
value = "/{type}")
public ResponseEntity<Response> updateDeveloper(
@PathVariable String type,
@RequestParam("year") String year,
@RequestBody Developer employeeUpdate,
) { .....}
@ApiOperation(value = "Update Manager (manager)",
response = ResponseEntity.class)
@RequestMapping(method = RequestMethod.PATCH,
value = "/{type}")
public ResponseEntity<Response> updateManager(
@PathVariable String type,
@RequestParam("year") String year,
@RequestBody Manager employeeUpdate,
) { .....}
Developer and Manager扩展抽象类Employee。
我试过只有一种方法如下:
@ApiOperation(value = "Update Employee (manager, dev)",
response = ResponseEntity.class)
@RequestMapping(method = RequestMethod.PATCH,
value = "/{type}")
public ResponseEntity<Response> updateEmployee(
@PathVariable String type,
@RequestParam("year") String year,
@RequestBody Employee employeeUpdate,
) { .....}
但是spring无法将Employee实例实例化为它的摘要。
我的设计不正确吗?我更喜欢有一个不需要修改Employee / Developer / Manager类的解决方案。
提前致谢!!
答案 0 :(得分:0)
通过REST合规性,您应该确定您的资源:
@RequestMapping(method = RequestMethod.PATCH, value = "/developer")
@RequestMapping(method = RequestMethod.PATCH, value = "/manager")
如果你仍然想要随机发布一个主体(开发人员或经理),你是经理和开发人员的组合DTO:
public class EmployeeDTO {
private int type; // Developer or manager
// All of properties of Manager and Developer
}
通过检查type
,您可以委派正确的服务方法。
答案 1 :(得分:0)
谢谢大家对此进行调查。我找到了一种适合我情况的方法:
{{1}}
有了这个,我也不会得到任何实例化错误,当尝试将单个方法和请求体的数据类型设置为父类时。