我正在尝试使用Spring构建REST控制器.为了格式化数据以提高可读性和集成度,我使用了Mapstruct.这是我写Mapper的方式.
@Mapper
public abstract class DeviceDataMapper {
@Autowired
DeviceService deviceService;
public static DeviceDataMapper INSTANCE = Mappers.getMapper(DeviceDataMapper.class);
@Mappings({
@Mapping(source = "deviceId", target = "iddevice"),
@Mapping(source = "deviceName", target = "name")
})
public abstract TODevice deviceToTODevice(DeviceData device);
public DeviceData toDeviceToDeviceData(TODevice toDevice){
DeviceData deviceData = new DeviceData();
deviceData.setDeviceId(toDevice.getIddevice());
deviceData.setDeviceName(toDevice.getName());
deviceData.setDeviceTemplateId(toDevice.getDeviceTemplateId());
try {
deviceData.setDeviceTemplateName(deviceService.findDeviceTemplateById(toDevice.getDeviceTemplateId()).getName());
} catch (Exception e) {
e.printStackTrace();
}
return deviceData;
}}
Run Code Online (Sandbox Code Playgroud)
API控制器功能如下所示
@RequestMapping(value = "/{deviceId}",method = RequestMethod.GET)
public @ResponseBody DeviceData get(@PathVariable int deviceId) {
DeviceData deviceData=new DeviceData();
try {
deviceData = …Run Code Online (Sandbox Code Playgroud) 我从服务器得到的是一个父对象列表,每个父对象由零个或多个子对象组成。有点像下面这样
var data = [{
"Id" : 1,
"permissionValue" : 7,
"child" : { //only one child object for simplicity
"Id" :2,
"permissionValue" : 7
}
}];
Run Code Online (Sandbox Code Playgroud)
我想将此数据加载到 jQuery 数据表中。实现一个 rowCallback 函数(添加一些 CSS 类),如下所示:
tableOptions.rowCallBack = function(row,data,index){
var api = this.api();
api.rows.add(data.child).draw(); //not sure whether draw is necessary
};
tableOptions.data = data;
that.dataTable = $("#dataTable").DataTable(tableOptions);
Run Code Online (Sandbox Code Playgroud)
不出所料,只有父对象会加载。我明白这不是数据应该如何传递的方式。尽管如此,了解这种分层数据是否可以通过努力来显示仍然是件好事。