2012-04-19 3 views
0

Я хочу использовать интерфейс только для рамки RestEasy, поскольку он намного чище и должен работать.Resteasy FrameWork POST не работает

Но у меня возникают проблемы с передачей параметров в рамках запроса POST.

Я нашел этот пример в документации:

@PUT 
@Path("basic") 
@Consumes("text/plain") 
void putBasic(String body); 

И ссылаться:

import org.jboss.resteasy.client.ProxyFactory; 
// ... 

// this initialization only needs to be done once per VM 
RegisterBuiltin.register(ResteasyProviderFactory.getInstance()); 

SimpleClient client = ProxyFactory.create(SimpleClient.class, "http://localhost:8081"); 
client.putBasic("hello world"); 

Я попробовал следующее:

@POST 
@Consumes(MediaType.TEXT_PLAIN) 
@Path("http://localhost:8080/app/resource") 
String postBasic(String body); 

И вызывается:

RegisterBuiltin.register(ResteasyProviderFactory.getInstance()); 

RepoClient client = ProxyFactory.create(RepoClient.class, ""); 
client.postBasic("hi"); 

При печати параметров Map (и отладки) в методе вызываемого податчика doPost параметры были пустыми. Я действительно не вижу разницы между моим подходом и документированным (отсюда: Resteasy interface example).

Итак, чтобы подвести итог, только с использованием декларации интерфейса и реализации прокси-сервера, как я могу отправлять параметры POST?

Решение: Как и ожидалось ... просто нужно было объявить потребление соответствующим образом с принятым параметром, и это работает ... проблема заключалась в вызове метода POST сервлета в другом сервлете.

ответ

1

В вашем примере POST @Path не может содержать абсолютный URL. Попробуйте установить только /app или /app/resource, в зависимости от вашей конфигурации.

+0

Просто попробовал ... сервлет фактически вызван ... но не имеет параметров запроса –

+1

Вы вызываете сервер в другом исполняемом файле? Обратите внимание, что вы создаете 'ProxyFactory' с * пустым * базовым URL-адресом, поэтому действительно ли он подключается через сеть (даже через loopback) к серверу? –

+0

Я проверю, может ли быть вызов метода post внутри сервлета –

0

В качестве сомневающегося, @Path должен быть относительным URL, у меня был только опыт с Джерси, и я не знаком с Resteasy, но я думаю, что это будет то же самое.

У вас будет аннотация @Path, а методы внутри могут иметь аннотацию @Path.

Так что, если у вас что-то вроде этого:

@POST 
    @Path("Foo")  
    public class Foo() 
    { 
     @POST 
     @Path("Bar") 
     public String Bar() 
     { 
     ... 
     } 
    } 

Так POST для http://localhost:8080/Foo/Bar выполнит метод Bar.

Мой комментарий был длинным, поэтому я просто применил его здесь.

Извините, но я не видел твой комментарий к сообщению о допросах до тех пор, пока не появится. Используется ли пример использования @FormParam?

Учитывая, что я новичок в REST, но до сих пор каждые методы @post пришлось использовать либо @PathParam или @FormParam и ваш метод будет выглядеть следующим образом:

@Post 
    @Path("Foo/{foobar}") 
    public String Bar(@PathParam("foobar") String foobar) 
    { 
    } 

или как

@Post 
    @Path("Foo") 
    public String Bar(@FormParam("foobar") String foobar) 
    { 
    } 
+0

Проблема не имеет ничего общего с @Path ... вызывается метод post в сервлете, но параметр строки не является передано ему –

+0

Извините, я не видел твой комментарий к сообщению доп. Используется ли пример использования @FormParam? – Corwin01

+0

nop ... взгляните на ссылку, которую я разместил ... это просто сообщение –

Смежные вопросы