2012-06-22 2 views
1

Привет У меня есть веб-сервиса, который генерируется из buildServices в Liferay .. метод выглядит следующим образомКак получить HttpServletRequest в Liferay WebService

public User getUserTest(long userId) { 

    User u = null; 
    try { 
     Token token = OAuthFactoryUtil.createToken("sasa", "sdad"); 
    } catch (OAuthException e1) { 
     // TODO Auto-generated catch block 
     e1.printStackTrace(); 
    } 

    try { 
     u = UserLocalServiceUtil.getUser(userId); 
     System.out.println("xx user " + u.getScreenName()); 
    } catch (Exception e) { 
     System.out.println(" Exception ************* " + e.toString()); 
    } 

    return u; 
} 

параметров в этом WS будет таким:

http://localhost:8080/demo-portlet/api/json?serviceClassName=com.sample.portlet.library.service.BookServiceUtil&serviceMethodName=getUserTest&userId=10195&serviceParameters=[userId] 

имеющий userId в качестве параметра ..

Как бы вы передать параметр, если вам нужно HttpServletRequest .. мой мне ThOD будет выглядеть следующим образом

public User getUserTest(HttpServletRequest httpRequest) { 

    User u = null; 

    try { 

     String version = httpRequest.getHeader("X-PHM-APP-VERSION"); 
     Token token = OAuthFactoryUtil.createToken("sasa", "sdad"); 
    } catch (OAuthException e1) { 
     e1.printStackTrace(); 
    } 

    try { 
     String authorization = httpRequest.getHeader("Authorization"); 
     u = UserLocalServiceUtil.getUser(Long.valueOf(authorization)); 
     System.out.println("authorization --> " + authorization); 
     System.out.println("xx user " + u.getScreenName()); 
    } catch (Exception e) { 
     System.out.println(" Exception ************* " + e.toString()); 
    } 

    return u; 
} 

мне нужно HttpServletRequest, чтобы получить параметры из заголовка, вместо передачи через URL. Есть ли лучший способ получить параметры из заголовка? за вашу помощь

ответ

0

В Liferay вы получите HttpServletRequest от PortletRequest. Пожалуйста, используйте класс com.liferay.portal.util.PortalUtil.

В нем есть 2 метода. getHttpServletRequest() и getOriginalServletRequest(), вы получите оба запроса на уровне основного уровня http из этих методов.

+1

для получения httpServletRequest вам понадобится portletRequest, теперь как вы передадите portletRequest методу веб-сервиса, так что мы вернулись с того места, где мы начали: -). Также не означает ли, что веб-сервис должен быть агностическим языком программирования и предоставлять параметр как httpServletRequest, то есть запрашивать у потребителя отправку httpServletRequest, привязать его к Java и уничтожить самую цель? Я хотел бы знать, возможно ли это, поскольку я также изучаю WS и довольно новичок в этом. Спасибо –

+0

Я только что показал способ извлечения параметра, можно вызвать веб-сервис, передав параметр String, просто способ извлечь параметр! –

+0

@FelixChristy Как получить PortletRequest с помощью этого API? – thermz

3

Я думаю, что уровень webservice обычно находится на более позднем этапе, когда вы никогда не пропустите запрос. В идеале, что бы вы сделали, это передать параметр заголовка в webservice вместо запроса

+0

Спасибо за ваш ответ Sandeep, на самом деле это именно то, что мне нужно, передавая параметр заголовка, как бы я это сделал. Именно по этой причине мне нужен этот HttpServletRequest, чтобы получить параметр заголовка. Спасибо –

+0

Clint обычно мы вызываем веб-сервис от контроллера, у которого будет запрос. Я думаю, вы сначала напишете клиента, который будет вызываться из контроллера или что-то еще. Вы не можете получить там запрос и передать его там? –