Spring,Java:将泛型对象列表作为返回类型传递
我正在开发一个Spring MVC应用程序,根据用户设置的模式,我必须返回Object1或Object2的列表。理想情况下,我可以创建两个控制器方法并适当地发送列表,但我想知道是否有任何方法,我可以在该控制器方法中发送任何类型的列表
控制器方法:
@PreAuthorize("hasRole('ROLE_USER')")
@RequestMapping(value = "/findnotebydays/{days}/{canvasid}/{mode}")
public @ResponseBody List<Inotes> findNotesByDays(@PathVariable("days")int days, @PathVariable("canvasid")int canvasid,
@PathVariable("mode")boolean mode ){
if(!mode){
return this.groupNotesService.findGroupNotesByDays(days,canvasid);
} else {
return this.notesService.findNotesByDays(days,canvasid);
}
}
基本上,如果mode为false,我想返回List<GroupNotes>
,如果mode为true,我想返回List<Notes>
。我天真的方法,我以为我可以说它是一个对象并返回,但似乎不起作用。请告诉我我能做什么。非常感谢。:-)
更新
GroupNotes模型类:
@Entity
@Table(name="groupnotes")
public class GroupNotes implements Inotes{
@Id
@Column(name="mnoteid")
@GeneratedValue(strategy = GenerationType.SEQUENCE,generator = "mnote_gen")
@SequenceGenerator(name = "mnote_gen",sequenceName = "mnote_seq")
@org.hibernate.annotations.Index(name = "mnoticesidindex")
private int mnoticesid;
@Column(name = "mnotetext")
private String mnotetext;
//Other variables, getters, setters ignored
}
Notes模型类:
@Entity
@Table(name="note")
public class Notes implements Inotes{
@Id
@Column(name="noteid")
@GeneratedValue(strategy = GenerationType.SEQUENCE,generator = "note_gen")
@SequenceGenerator(name = "note_gen",sequenceName = "note_seq")
@org.hibernate.annotations.Index(name = "noteidindex")
private int noticesid;
@Column(name = "notetext")
private String notetext;
//Other variables, getters, setters ignored
}
接口Inotes:
package com.journaldev.spring.model;
public interface Inotes {
}
# 1 楼答案
您可能应该使用两个类共享的公共接口
声明一个接口,例如:
您的代码将变成:
另一个更简单的解决方案是返回
List
(或List<?>
以获取法规遵从性),但这种方法更合适# 2 楼答案
考虑到
Notes
和GroupNotes
都在实现Note接口(例如),您可以始终返回List<Note>
# 3 楼答案
遵循干净的编码器风格,如果必须将布尔值传递给一个方法,该方法实际上执行两种不同的操作,而您希望一个方法只执行一种操作
我只需要做两个控制器操作,这对用户和代码的维护人员以后会更清楚