【发布时间】:2016-12-20 19:18:39
【问题描述】:
请帮助改造2。我是 Retrofit 的新手。 我创建简单的服务器应用程序。 应用管理日志列表:在内存列表中添加日志,并通过id返回日志。 有一个Journal.java:
public class Journal {
private AtomicInteger getNewId = new AtomicInteger(0);
@SerializedName("id")
@Expose
private Integer id;
@SerializedName("name")
@Expose
private String name;
public Journal(String name) {
this.id = getNewId.incrementAndGet();
this.name = name;}
public Integer getId() {return id;}
public String getName() {return name;}
}
有一个控制器接口:
public interface JournalController {
@GET("journal")
Call<List<Journal>> getJournalList();
@GET("journal/{id}")
Call<Journal> getJournal(@Path("id") Integer id);
@POST("journal")
Call<Journal> addJournal(@Body Journal journal);
}
这是接口实现:
@Controller
public class JournalControllerImpl implements JournalController {
// An in-memory list that the controller uses to store the Journals
private List<Journal> journals = new ArrayList<>();
@RequestMapping(value= "journal", method=RequestMethod.GET)
public @ResponseBody Call<List<Journal>> getJournalList() {
return (Call<List<Journal>>) journals;}
@RequestMapping(value= "journal/{id}", method= RequestMethod.GET)
public @ResponseBody Call<Journal> getJournal(@Path("id") Integer id) {
Journal journal = journals.get(id);
return (Call<Journal>) journal;}
@RequestMapping(value= "journal", method= RequestMethod.POST)
public @ResponseBody Call<Journal> addJournal(@Body Journal journal) {
journals.add(journal);
return (Call<Journal> ) journal; }
}
应用程序已成功启动。应用启动时的控制台输出:
将“{[/journal],methods=[GET]}”映射到 public retrofit2.Call> main.JournalControllerImpl.getJournalList()
将“{[/journal],methods=[POST]}”映射到 public retrofit2.Call main.JournalControllerImpl.addJournal(main.Journal)
将“{[/journal{/id}],methods=[GET]}”映射到 public retrofit2.Call main.JournalControllerImpl.getJournal(java.lang.Integer)
我尝试在浏览器上运行 URL http://localhost:8080/journal(或 GET HttpRequest http://localhost:8080/journal)。 应用程序输出有错误:
"... java.lang.ClassCastException: java.util.ArrayList 无法转换为 retrofit2.Call..."
你能猜出哪里不对吗? 将 java.util.ArrayList 转换为 Call 真的有问题吗? (我尝试过 CopyOnWriteArrayList 但这没有帮助。
提前谢谢你。
【问题讨论】:
-
Journal不是Call<Journal>,这意味着您的演员阵容失败。在从任何方法返回之前,您需要将Journal包装在Call中。
标签: java call server-side classcastexception retrofit2