2016-04-09 46 views
1

我在App Engine的服務器創建一個谷歌端點如下:App Engine的端點接受POST數據請求主體

package com.xxxxx.gcmbackend; 
import com.google.api.server.spi.config.Api; 
import com.google.api.server.spi.config.ApiMethod; 
import com.google.api.server.spi.config.ApiNamespace; 
import com.google.api.server.spi.response.CollectionResponse; 

import java.util.List; 
import java.util.logging.Logger; 
import javax.inject.Named; 

import static com.xxxxxx.gcmbackend.OfyService.ofy; 

@Api(
     name = "register", 
     version = "v1", 
     namespace = @ApiNamespace(
       ownerDomain = "gcmbackend.xxxxx.com", 
       ownerName = "gcmbackend.xxxxx.com", 
       packagePath="" 
     ) 
) 


public class UserRegistrationEndpoint { 
    private static final Logger log = Logger.getLogger(RegistrationEndpoint.class.getName()); 
    @ApiMethod(name = "register") 
    public void registerDevice(@Named("regId") String regId, @Named("username") String username, @Named("phone") String phone) { 
     if(findRecord(regId) != null) { 
      log.info("Device " + regId + " already registered, skipping register"); 
      return; 
     } 
     RegistrationRecord record = new RegistrationRecord(); 
     record.setRegId(regId); 
     record.setUsername(username); 
     record.setPhone(phone); 
     ofy().save().entity(record).now(); 
    } 
    private RegistrationRecord findRecord(String regId) { 
     return ofy().load().type(RegistrationRecord.class).filter("regId", regId).first().now(); 
    } 
} 

這工作完全在創造新的紀錄User。 API是以下格式:

http://example.appspot.com/_ah/api/register/v1/registerDevice/<regId>/<username>/<phone> 

但是,我想要的網址看起來像這樣:

http://example.appspot.com/_ah/api/register/v1/registerDevice/ 

,然後發送POST數據如下:

{ 
    regId: "some_value", 
    username: "some_value", 
    phone: "some_value" 
} 

怎麼辦爲了實現這種格式,我需要在我的端點中進行更改?

回答

1

您需要創建一個具有regId,usernamephone屬性的java bean。 RegistrationInput

public class RegistrationInput { 
    private String regId; 
    private String username; 
    private String phone; 

    public String getRegId() { 
     return regId; 
    } 

    public void setRegId(String regId) { 
     this.regId = regId; 
    } 

    public String getUsername() { 
     return username; 
    } 

    public void setUsername(String username) { 
     this.username = username; 
    } 

    public String getPhone() { 
     return phone; 
    } 

    public void setPhone(String phone) { 
     this.phone = phone; 
    } 
} 

然後作爲參數添加上面的java bean RegistrationInput,到ApiMethod

@ApiMethod(name = "register") 
public void registerDevice(RegistrationInput input) { 
    ..... 
} 
+0

嘿!你能解釋一下嗎?我是Java的新手,所以我不太清楚Java bean的含義以及它的外觀。 – Newtt

+0

更新了答案。一個java bean是一個簡單的類,只有很少的屬性。它還具有每個屬性的getter和setter方法。 – Mithun