POST 매개 변수로 안이하게 @Query를 사용하면 진흙 늪에 빠졌습니다.
소개
읽은 책을 목록 관리하는 앱을 만들 수 있도록 책 추가 API 구현을했습니다.
어떤 이미지를 선택하더라도 이미지 획득 오류가 발생하여 추가할 수 없습니다.
드디어 진흙 늪에서 빠져 나올 수 있었으므로 비망록으로 기록해 둡니다.
원인
로그
Response{protocol=http/1.1, code=414, message=Request-URI Too Large
분명히 URI가 너무 길다. 하지만 왜 그렇게 길어지는 거야?
원인은 요청으로 데이터를 보내는 방법에 문제가 있었다.
ApiInterface.java
public interface ApiInterface {
@Headers(HEADERS)
@POST("/books")
Call<BookInfoResponse> addBook(
@Header("Authorization") String token,
// ↓原因
@Query("name") String bookTitle,
@Query("image") String stringImage,
@Query("price") int bookPrice,
@Query("purchase_date") String purchaseDate
);
@Query란?
데이터베이스로 보낼 쿼리 문을 지정하는 방법. URL에 정보가 기재된다.
즉 책명이나 이미지 패스나 추가하는 북의 정보 모두가 URL에 포함하는 설정으로 한 것입니다.
그건 길어질거야.
원칙적으로
· Post 요청은 @Body
・GET 리퀘스트는 @Query (※GET 리퀘스트로 @Body 는 사용할 수 없다)
라는 것.
라는 것으로 @Body 로 변경하면 잘 되었습니다!
ApiInterface.java
public interface ApiInterface {
@Headers(HEADERS)
@POST("/books")
Call<BookInfoResponse> addBook(
@Header("Authorization") String token,
// @Bodyに変更
@Body BookRequest bookRequest
);
BookRequest.java
public class BookRequest {
@SerializedName("name")
private String title;
@SerializedName("price")
private int price;
@SerializedName("purchase_date")
private String purchaseDate;
@SerializedName("image")
private String image;
public BookRequest(String title, int price, String purchaseDate, String image) {
this.title = title;
this.price = price;
this.purchaseDate = purchaseDate;
this.image = image;
}
}
공부한 사이트
마지막으로
여러분으로부터 하면, 원래 어째서 @Query 로 하고 있었어? 라는 느낌이겠지요. 웃음
완전한 지식 부족입니다. 공부가 되었습니다~.
Reference
이 문제에 관하여(POST 매개 변수로 안이하게 @Query를 사용하면 진흙 늪에 빠졌습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/kilalabu/items/fc685f8ad01e036dddcf텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)