2011-04-26 3 views
4

Кто-нибудь знает, как задать несколько параметров запроса в веб-службе REST? У меня есть запись с помощью java.My локон образец, как это:как задать множественный параметр запроса в веб-службе REST

curl -X PUT http://localhost:8080/project/resources/user/directory/sub-directory?name=shareuser&type=Read -v 

Моя программа:

@PUT 
@Path("{user}/{directory:.+}") 
public Response doshare(@PathParam("user")String name, 
     @PathParam("directory")String dir, 
     @QueryParam("name")String sharename, 
     @QueryParam("type")String type){ 
    mongoDAOImpl impl=new mongoDAOImpl(); 
    Mongo mongo=impl.getConnection("127.0.0.1","27017"); 
    DB db=impl.getDataBase(mongo,"public"); 
    DBCollection coll=impl.getColl(db,name); 
    DBCollection coll2=impl.getColl(db,"sharedb"); 
    shareDTO sharedto=new shareDTO(); 
    String authority=type.toLowerCase(); 
    if(authority.equals("rd")){ 
     sharedto.setAuthority("4"); 
    }else if(authority.equals("rw")){ 
     sharedto.setAuthority("12"); 
    } 
    sharedto.setTargetuser(sharename); 
    sharedto.setRealURI("/home/public/"+name+"/"+dir); 
    sharedto.setIdentifier(name); 
    sharedto.setParentURI("/home/public/"+sharename); 
    boolean bool = false; 
    sharefun=new sharefunction(); 
    if(sharefun.checksubfoldershared(coll, coll2, sharedto)){ 
     bool=sharefun.sharefiles(coll, coll2, sharedto); 
    }else{ 
     System.out.println("Error"); 
    } 
    // ... 

Но я только получаю parameter.How имя запроса, чтобы получить или как ввести в завиток чтобы получить все параметры запроса?

+0

PUT и параметры запроса? Это не очень приятно. –

+0

Любое предложение исправить это? Я пишу веб-сервис для оконного приложения. У меня есть веб-приложение. – sudo

+0

См. Мой ответ ниже. –

ответ

19

Ваш код в порядке - проблема в том, как вы вызываете завиток. При передаче URL-адреса для завивки, содержащего '&', вы должны указывать кавычки вокруг URL-адреса. В противном случае оболочка будет интерпретировать материал после «&» в качестве отдельной команды.

РЕДАКТОРА: Мой текст получает munged, когда я отправляю его как комментарий. Вот что вам нужно сделать:

curl -X PUT 'http://localhost:8080/project/resources/user/directory/sub-directory?name=shareuser&type=Read' -v 
+0

Я вызывал завиток, используя «curl -X PUT http: // localhost: 8080/project/resources/user/directory/sub-directory? Name = shareuser '&' type = read". Но я получил исключение Http "500". Все еще есть проблема. Если я печатаю, читаю и пишу, как мне это сделать? например "? name = shareuser '&' type = read & write" – sudo

+0

Нет, прочитайте, что я написал снова. Поместите кавычки * вокруг URL *. Вот так: curl 'http://example.com/?a=A&b=B' –

+0

привет майке, получил ту же ошибку Http 500. Я написал как: curl -X PUT 'http: // localhost: 8080? A = A & b = B ' – sudo

0

Вы пытались использовать опцию -d? например

curl -X PUT -d "name=shareuser&type=Read" http://locahost:8080/project/resources/user/directory/sub-directory -v 
+0

да я пробовал, но получил такую ​​же ошибку. Возможно, Coz моя функция PUT является конфликтом. У меня есть функция PUT для создания контейнера. – sudo

1

Вы могли бы попробовать обработки всего это, как многочастная загрузка (серверные детали не стандартизированы и вы не сказали, какие рамки вы используете, так что я не могу дать больше ключей), но я вопрос, почему у вас есть пользователь и права доступа (с помощью любых параметров). Наверняка вам было бы лучше вывести пользователя на хранение, проверив учетные данные пользователя и используя набор разрешений по умолчанию, который они могут изменить позже? Почти как дешево, и невероятно проще.

+0

привет donal, я не использую рамки для веб-сервиса. Я просто создаю в NetBean как веб-приложение и пишу веб-службу REST в классе POJO. Этот метод PUT предназначен для использования функции общего доступа, а не аутентификации пользователя или загрузки. Я новичок в веб-сервисе, и я занимаюсь интернетом по поводу хранения. Супервайзер попросит меня закончить как можно раньше. Итак, colud u дайте какое-нибудь предложение? – sudo

+2

@user: Вы _bet_ вы используете фрейм! Что-то обрабатывает эти аннотации, чтобы превратить их в код, который соединяет все вместе. Учитывая, что вы используете Netbeans, я думаю, вы, вероятно, используете Джерси, даже если вы этого не знаете. Многосторонняя обработка в Джерси - это расширение (трикотаж-мультипликатор). –