java - 无法在 Google Cloud Endpoints 的 Endpoint 类中创建多个方法

标签 java google-app-engine google-cloud-endpoints

我一直在尝试在生成的 Endpoint 类中创建一些新方法,但发现了这种奇怪的行为:我可以向生成的类添加一个方法,但我无法添加其中两个方法,无论我选择这两个方法中的哪一个添加。 这是我生成的类的代码,我在其中添加了两个添加方法的代码:

  package it.raffaele.bills;

import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;

import javax.annotation.Nullable;
import javax.inject.Named;
import javax.jdo.PersistenceManager;
import javax.jdo.Query;
import javax.persistence.EntityExistsException;
import javax.persistence.EntityNotFoundException;

import com.google.api.server.spi.config.Api;
import com.google.api.server.spi.response.CollectionResponse;
import com.google.appengine.api.datastore.Cursor;
import com.google.appengine.datanucleus.query.JDOCursorHelper;

@Api(name = "utenteendpoint")
public class UtenteEndpoint {

    /**
     * This method lists all the entities inserted in datastore.
     * It uses HTTP GET method and paging support.
     *
     * @return A CollectionResponse class containing the list of all entities
     * persisted and a cursor to the next page.
     */
    @SuppressWarnings({ "unchecked", "unused" })
    public CollectionResponse<Utente> listUtente(
            @Nullable @Named("cursor") String cursorString,
            @Nullable @Named("limit") Integer limit) {

        PersistenceManager mgr = null;
        Cursor cursor = null;
        List<Utente> execute = null;

        try {
            mgr = getPersistenceManager();
            Query query = mgr.newQuery(Utente.class);
            if (cursorString != null && cursorString != "") {
                cursor = Cursor.fromWebSafeString(cursorString);
                HashMap<String, Object> extensionMap = new HashMap<String, Object>();
                extensionMap.put(JDOCursorHelper.CURSOR_EXTENSION, cursor);
                query.setExtensions(extensionMap);
            }

            if (limit != null) {
                query.setRange(0, limit);
            }

            execute = (List<Utente>) query.execute();
            cursor = JDOCursorHelper.getCursor(execute);
            if (cursor != null)
                cursorString = cursor.toWebSafeString();

            // Tight loop for fetching all entities from datastore and accomodate
            // for lazy fetch.
            for (Utente obj : execute)
                ;
        } finally {
            mgr.close();
        }

        return CollectionResponse.<Utente> builder().setItems(execute)
                .setNextPageToken(cursorString).build();
    }

    /**
     * This method gets the entity having primary key id. It uses HTTP GET method.
     *
     * @param id the primary key of the java bean.
     * @return The entity with primary key id.
     */
    public Utente getUtente(@Named("id") Long id) {
        PersistenceManager mgr = getPersistenceManager();
        Utente utente = null;
        try {
            utente = mgr.getObjectById(Utente.class, id);
        } finally {
            mgr.close();
        }
        return utente;
    }

    /**
     * This inserts a new entity into App Engine datastore. If the entity already
     * exists in the datastore, an exception is thrown.
     * It uses HTTP POST method.
     *
     * @param utente the entity to be inserted.
     * @return The inserted entity.
     */
    public Utente insertUtente(Utente utente) {
        PersistenceManager mgr = getPersistenceManager();
        try {
            if (containsUtente(utente)) {
                throw new EntityExistsException("Object already exists");
            }
            mgr.makePersistent(utente);
        } finally {
            mgr.close();
        }
        return utente;
    }

    /**
     * This method is used for updating an existing entity. If the entity does not
     * exist in the datastore, an exception is thrown.
     * It uses HTTP PUT method.
     *
     * @param utente the entity to be updated.
     * @return The updated entity.
     */
    public Utente updateUtente(Utente utente) {
        PersistenceManager mgr = getPersistenceManager();
        try {
            if (!containsUtente(utente)) {
                throw new EntityNotFoundException("Object does not exist");
            }
            mgr.makePersistent(utente);
        } finally {
            mgr.close();
        }
        return utente;
    }

    /**
     * This method removes the entity with primary key id.
     * It uses HTTP DELETE method.
     *
     * @param id the primary key of the entity to be deleted.
     * @return The deleted entity.
     */
    public Utente removeUtente(@Named("id") Long id) {
        PersistenceManager mgr = getPersistenceManager();
        Utente utente = null;
        try {
            utente = mgr.getObjectById(Utente.class, id);
            mgr.deletePersistent(utente);
        } finally {
            mgr.close();
        }
        return utente;
    }


/********************************ADDED CODE*********************************************/

     @SuppressWarnings({"cast", "unchecked"})
        public List<Bill> getUserBillsByTag(@Named("tag") String tag){
         PersistenceManager mgr = getPersistenceManager();
            Utente utente = null;
            List<Bill> list = new LinkedList<Bill>();
            try {
                Query q = mgr.newQuery(Utente.class);
                q.setFilter("nfcID == '" + tag +"'");
                List<Utente> utenti = (List<Utente>) q.execute();
                if (!utenti.isEmpty()){
                    for (Utente u : utenti){
                        list.addAll(u.getBollettini());
                        break;  //fake loop.
                    }

                }else{
                    //handle error

                }


            } finally {
                mgr.close();
            }
            return list;


        }


     @SuppressWarnings({"cast", "unchecked"})
    public List<Bill> getUserBills(@Named("id") Long id){
         Utente utente = getUtente(id);
         System.out.println(utente);
        List<Bill> list = utente.getBollettini();
        return list;
    }


/*******************************************************************************/       


    private boolean containsUtente(Utente utente) {
        PersistenceManager mgr = getPersistenceManager();
        boolean contains = true;
        try {
            mgr.getObjectById(Utente.class, utente.getId());
        } catch (javax.jdo.JDOObjectNotFoundException ex) {
            contains = false;
        } finally {
            mgr.close();
        }
        return contains;
    }

    private static PersistenceManager getPersistenceManager() {
        return PMF.get().getPersistenceManager();
    }

}

你知道如何帮助我吗?我错过了什么吗?

最佳答案

您的方法具有相同的 API 描述 (path="utenteendpoint/{param}")。 给其中一个不同的路径:

@ApiMethod(path="utenteendpoint/tag/{tag}/")
public List<Bill> getUserBillsByTag(@Named("tag") String tag) { ... }

@ApiMethod(path="utenteendpoint/user/{id}/")
public List<Bill> getUserBills(@Named("id") Long id) { ... }

关于java - 无法在 Google Cloud Endpoints 的 Endpoint 类中创建多个方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15157237/

相关文章:

java - 通过 Google Cloud Endpoints 传输 BigDecimal 的异常(exception)情况

java - java网络程序中字符串与内存相关的问题

php - App Engine 实例激增

java - 谷歌应用引擎: how to add information to the connect/disconnect channel "ping"s?

java - Google App Engine 1.6.4 上的 Guice 启动时间

google-cloud-platform - 为什么对 Cloud Functions 的身份验证与 Cloud Endpoints 不同?

java - Google App Engine 不支持 vision api Runtime.addShutdownHook 错误

java - 如何在java中的ireport 4.5一列中显示多个名称

java - 为什么这段代码不可编译

java - 为什么我可以在不定义持久性单元的情况下注入(inject)entityManager?