Retrofit2で助けてください。私はRetrofitで非常に新しいです。 シンプルなサーバーアプリケーションを作成します。 アプリケーションは、ジャーナルのリストを管理します。メモリ内のリストにジャーナルを追加し、IDでジャーナルを返します。 Journal.javaがあります:Retrofit2:ClassCastException:java.util.ArrayListをretrofit2.Callにキャストできません。
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; }
}
アプリケーションがsuccesesully始めました。アプリケーションの起動時にコンソール出力:マッピングされた
"{[/ジャーナル]、メソッド= [GET]}" パブリックretrofit2.Call上> main.JournalControllerImpl.getJournalList(){[/雑誌」マップ
]、メソッド= [POST]} "を公開retrofit2.Call main.JournalControllerImpl.addJournal(main.Journal)
" {[journal] /メソッド] =メソッドは[public] retrofit2にマップされました。 .Call main.JournalControllerImpl.getJournal(java.lang.Integer)
T私はブラウザでURL http://localhost:8080/journalを実行しようとします(またはGET HttpRequest http://localhost:8080/journal)。
:アプリケーションの出力にエラーがあり 「...とjava.lang.ClassCastException:java.util.ArrayListのはretrofit2.Callにキャストすることはできませんが...」
あなたは何が間違っていると思いますか? java.util.ArrayListを呼び出して変換すると本当に問題はありますか? (私はCopyOnWriteArrayListとにしようと試みてきたが、これは役立ちません。
は、事前にありがとうございます。
'Journal'は、あなたのキャストが失敗した意味'コール 'ではありません。任意のメソッドから戻る前に 'Call'に' Journal'をラップする必要があります。 –