更新データとREST APIを使用してデータを取得できましたが、投稿データにエラーがあります。ポストはpostmanを使用して動作しますが、retrofitでは使用できません。エラーを見つけることができませんでした。エンドポイントを変更しようとしました。つまり、「rest」と「rest /」ですが、 DjangoのRESTfulなAPIのポストのDjango RESTful APIのRetrofit @POSTで404を解決するには?
ApiView:view.py
def post(self,request):
serializer =table_restSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response({'results':serializer.data},status=201)
return Response(serializer.errors, status=404)
urls.py
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^rest',views.restSerializer.as_view())
]
urlpatterns = format_suffix_patterns(urlpatterns)
serializer.py:
class table_restSerializer(serializers.ModelSerializer):
class Meta:
model = table_rest
fields = '__all__'
マイアンドロイドコード: インタフェース
public interface ApiInterface {
@GET("rest")
Call<CustomViewResponse> getJsonFromSid();
@POST("rest")
Call<CustomViewResponse> createTask(@Body CustomViewHolder task);
}
CustomViewHolderクラス:
public class CustomViewHolder {
@SerializedName("id")
private Integer id;
@SerializedName("tt")
private String tt;
@SerializedName("varr")
private Integer varr;
@SerializedName("edi")
private String edi;
public CustomViewHolder(String tt, Integer varr, String edi){
this.tt = tt;
this.varr = varr;
this.edi = edi;
}
public Integer getid(){
return id;
}
/*public void setid(Integer id){
this.id = id;
}*/
public String gettt()
{
return tt;
}
public void settt(String tt){
this.tt = tt;
}
public Integer getvarr(){
return varr;
}
public void setvarr(Integer varr){
this.varr = varr;
}
public String getedi(){
return edi;
}
public void setedi(String edi){
this.edi = edi;
}
}
CustomViewResponse class
public class CustomViewResponse {
@SerializedName("results")
private List<CustomViewHolder> results;
public List<CustomViewHolder> getResults(){
return results;
}
}
MainActivity:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final RecyclerView recyclerView = (RecyclerView) findViewById(R.id.sid_recycler_view);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
ApiInterface apiService = ApiClient.getClient().create(ApiInterface.class);
ApiInterface apiService1 = ApiClient.getClient().create(ApiInterface.class);
Call<CustomViewResponse> call = apiService.getJsonFromSid();
CustomViewHolder cc = new CustomViewHolder("my task title",22,"a string");
call.enqueue(new Callback<CustomViewResponse>() {
@Override
public void onResponse(Call<CustomViewResponse> call, Response<CustomViewResponse> response) {
int statuscode = response.code();
List<CustomViewHolder> customViewHolders = response.body().getResults();
recyclerView.setAdapter(new AdapterSid(customViewHolders, R.layout.list_item_sid, getApplicationContext()));
}
@Override
public void onFailure(Call<CustomViewResponse> call, Throwable t) {
Log.e("TAG main", t.toString());
}
});
call1.enqueue(new Callback<CustomViewResponse>() {
@Override
public void onResponse(Call<CustomViewResponse> call1, Response<CustomViewResponse> respo) {
int statuscode = respo.code();
Log.d("Message", "code..."+respo.code() + " message..." + respo.message());
CustomViewResponse respon = respo.body();
if (respon == null){
Log.e("Error",""+statuscode+ "......"+ respo.message()+"....null body");
}
}
@Override
public void onFailure(Call<CustomViewResponse> call1, Throwable t) {
Log.e(TAG, t.toString());
}
});
}
以下は、私のテーブル構造である:
class table_rest(models.Model):
tt = models.CharField(max_length=10,default = 12)
varr = models.IntegerField(default=30)
edi = models.CharField(max_length=1000,default='44')
def __str__(self):
return self.tt
郵便配達を使用して正常に保存されます私のJSON本体は次のとおりです。
{
"tt": "hello",
"varr": 911,
"edi": "emergency. Can't find solution"
}
に上限を設定していた一方で、データベースの列に13の長さの文字列を追加しようとしていたです。 404はあなたがアクセスしようとしているページが存在しないことを意味します – SripadRaj
私はこれを知っていますが、私は "http://192.168.1.50:80/rest"というURLを使用し、アンドロイドに私のベースURLは "http://192.168 .1.50:80/"。だから私は404に遭遇しています。私のURLを取得するためには、同じ "http://192.168.1.50:80/rest"であり、それは私に何か問題を与えることはありません。 – Sid
私は、ライン "serializer.is_valid()"は残りのAPIでfalseを返すと思いますが、私はその理由を理解していません。 – Sid