我正在开发一个Spring-MVC应用程序,根据用户设置的模式,我必须返回一个Object1或Object2的List。理想情况下,我可以创建两个控制器方法并适当地发送List,但我想知道是否有任何方法,我可以在该Controller方法中发送任何类型的List。
控制器方法:
@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
}
接口信息:
package com.journaldev.spring.model;
public interface Inotes {
}
答案 0 :(得分:4)
遵循干净的编码器样式,如果必须将布尔值传递给方法,那么该方法实际上会做两件事,并且您希望方法只做一件事。
我只会做两个控制器操作,稍后用户和代码的维护者会更清楚。
答案 1 :(得分:2)
您应该使用两个类共享的公共接口。
声明一个接口,例如:
public interface INotes{
}
public class GroupNotes implements INotes{...}
public class Notes implements INotes{...}
您的代码将变为:
@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);
}
}
另一个更简单的解决方案是返回List
(或List<?>
以获得合规性),但这种做法更为合适。
答案 2 :(得分:1)
考虑到Notes
和GroupNotes
都在实现Note界面(例如),您可以随时返回List<Note>
。