Spring REST Body + General Model

时间:2015-07-25 09:37:33

标签: java spring rest spring-mvc spring-restcontroller

我正在使用spring 4 REST。

我有一个基础class,而其他许多class也是如此。 例如,Employee是基础class,其他类hr,工程师,培训师等等扩展了员工。

我必须创建REST API来创建不同类型的员工。 interface是一个POST,它接受​​所有类型的员工。我不能为每个子类型创建不同的interface。从基数来看,我知道什么是子类型。

@RequestMapping(value= "/test/{employeeType}", method = RequestMethod.POST)
public void createEmp(@RequestBody Employee employee){

    //If type is HR, I want to cast to HR type
    //Is there any way we can take generic object in spring rest and then manage internally ?

}

1 个答案:

答案 0 :(得分:0)

也许试试这个?

@RequestMapping(value= "/test/{employeeType}", method = RequestMethod.POST)
public void createEmp(@PathVariable String employeeType, @RequestBody EmployeeDTO employeeDTO){
   transform(employeeType,employeeDTO);
}

这里EmployeeDTO将包含所有可能的参数,以便它可以构建任何子类,然后基于您刚刚转换为域对象(Employee)的employeeType?

按要求编辑

以下是示例代码:

public class Employee {

private String name;

}

public class Hr extends Employee {

private String department;

}

public class Hr extends Employee {

private String department;

}

然后DTO类应如下所示:

public class EmployeeDTO {

private String name;
private String course;
private String department;

}

然后,当您知道自己的类型时,可以使用DTO中的所有必要值转换为您想要的任何内容

编辑:现在我想起来这也可能是一个选择,但我需要看你的课程。

@RequestMapping(value= "/test/employee", method = RequestMethod.POST)
public void createEmp(@RequestBody Employee employee){

@RequestMapping(value= "/test/hr", method = RequestMethod.POST)
public void createHr(@RequestBody Hr hr){