SORU
28 Ocak 2014, Salı


Nasıl raw bütün JSON POST isteği Güçlendirme bir vücut?

Bu soru daha önce sorulmuş olabilir ama kesin bir cevap bulamadım. Tam olarak nasıl bir vücudun içinde bir post raw bütün JSON istek Güçlendirme mu?

Benzer soru here bkz. Ya bu cevap 19 ** doğru mu? Gerçekten bağlanmak olduğum hizmetleri sadece posta gövdesinde ham JSON bekliyor gibi değil, umut. JSON veri için, belirli bir alan için ayarlanmış değildir.

Ben sadece bunu açıklığa kavuşturmak istiyorumrestpertsbir kez ve herkes için. Bir kişi Güçlendirme kullanmamayı yanıtladı. Diğer sözdizimi belli değildi. Ama başka bir şekli, url olarak kodlanmış ve bir alanda (yani benim durumumda kabul edilemez) yer yalnızca yapılabilir Evet düşünüyor. Hayır, yapamam re-code Android müvekkilim için tüm hizmetler. Ve evet, alan özellik değerleri olarak JSON içeriği üzerinden geçen yerine ham JSON post büyük projelerde çok yaygındır. Hadi hemen al ve devam et. Birisi bunun nasıl yapıldığını gösteren belge ya da örnek gösterebilir? Ya da/de neden geçerli bir neden sunmak yapılmamalıdır.

GÜNCELLEME: 0 kesin olarak söyleyebileceğim Bir şey. Google Voleybolu YAPABİLİRSİNİZ. Doğru yaptı. Bu Güçlendirme miyim?

CEVAP
29 Ocak 2014, ÇARŞAMBA


@Body ek açıklama tek isteği beden tanımlar.

interface Foo {
  @POST("/jayson")
  FooResponse postJson(@Body FooRequest body);
}

Güçlendirme varsayılan olarak Gson kullandığından, FooRequest örnekleri olarak JSON isteği tek vücut olarak sıralanmış.

public class FooRequest {
  final String foo;
  final String bar;

  FooRequest(String foo, String bar) {
    this.foo = foo;
    this.bar = bar;
  }
}

Arama:

FooResponse = foo.postJson(new FooRequest("kit", "kat"));

Getirebilecek aşağıdaki beden

{"foo":"kit","bar":"kat"}

Gson docs nesne seri hale getirme nasıl çalıştığı hakkında çok daha fazlası var.

Eğer gerçekten "" vücudun kendini (ama lütfen bu kullanım için Gson!) olarak JSON ham göndermek istiyorsanız ... hala TypedInput kullanarak

interface Foo {
  @POST("/jayson")
  FooResponse postRawJson(@Body TypedInput body);
}

TypedInput tanımlanan "ilişkili mıme türü ile İkili veri.". Kolayca yukarıdaki bildirim ile ham veri göndermek için iki yol var:

  1. TypedByteArray ham bayt ve JSON mıme türü göndermek için kullanın:

    String json = "{\"foo\":\"kit\",\"bar\":\"kat\"}";
    TypedInput in = new TypedByteArray("application/json", json.getBytes("UTF-8"));
    FooResponse response = foo.postRawJson(in);
    
  2. TypedString TypedJsonString bir sınıf oluşturmak için Alt sınıf:

    public class TypedJsonString extends TypedString {
      public TypedJsonString(String body) {
        super(body);
      }
    
      @Override public String mimeType() {
        return "application/json";
      }
    }
    

    Ve sonra bu sınıfın bir örneği #1 gibi kullanın.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • kylediablo

    kylediablo

    8 Ocak 2007
  • LAHWF

    LAHWF

    5 Kasım 2009
  • videoisunrelated

    videoisunrel

    5 Mart 2009