2013-06-04 4 views
2

У меня есть REST API. Я делаю клиента. Я настроил весеннюю безопасность на аутентификацию моей службой отдыха. Мой контроллер REST APISpring mvc RestTemplate postForObject не отправляет параметр REST API

@RequestMapping(value = "/login", method = RequestMethod.POST, headers="content-type=application/json") 
public @ResponseBody 
UserDetails loginUser(WebRequest request) 
     throws LoginOrPasswordException { 
    logger.info("login user"); 
    logger.info(request); 
    String username = request.getParameter("username"); 
    logger.info(username); 
    UserDetails uDetails = userRepository.login(username); 
    System.out.println(uDetails.getPassword()); 
    return uDetails; 
} 

контекст Применение API

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:context="http://www.springframework.org/schema/context" 
    xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation=" 
     http://www.springframework.org/schema/beans  
     http://www.springframework.org/schema/beans/spring-beans-3.1.xsd 
     http://www.springframework.org/schema/context 
     http://www.springframework.org/schema/context/spring-context-3.0.xsd 
     http://www.springframework.org/schema/mvc 
     http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd"> 

<mvc:annotation-driven /> 

<context:component-scan base-package="com.zayats." /> 

<bean 
    class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> 
    <property name="messageConverters"> 
     <list> 
      <bean 
       class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter" /> 
     </list> 
    </property> 
</bean> 

<!-- Http Json MessageConverter --> 
<bean id="jsonConverter" 
    class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"> 
    <property name="supportedMediaTypes" value="application/json" /> 
</bean> 

<import resource="jdbc-config.xml" /> 

Далее идет метод клиент с restTemplate

HashMap<String, String> params = new HashMap<String, String>(); 
    params.put("username", username); 
    HttpHeaders requestHeaders = new HttpHeaders(); 
    requestHeaders.setContentType(MediaType.APPLICATION_JSON); 
    HttpEntity<?> httpEntity = new HttpEntity<Object>(params, requestHeaders); 
    logger.info("Create map and doing request."); 
    UserDetails matchingUser = restTemplate.postForObject(
      "http://localhost:8080/ApiFamilyShoplist/user/login", httpEntity, 
      UserDetails.class); 

Остальной шаблона конфигурации

<bean id="restTemplate" class="org.springframework.web.client.RestTemplate"> 
    <property name="messageConverters"> 
     <list> 
      <bean id="jsonConverter" 
       class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"> 
       <property name="supportedMediaTypes" value="application/json" /> 
      </bean> 
     </list> 
    </property> 
</bean> 

Когда я вызываю свой API с postForObject в контроллере API, он не получает никаких параметров. Пожалуйста, дайте мне совет, как заставить его отправлять данные в API. Спасибо.

ответ

1

Вы должны иметь один параметр в методе, чтобы принять параметр строки и аннотировать его с @RequestBody (внутри подписи метода):

@ResponseBody 
@Consumes("text/plain") 
public UserDetails loginUser(WebRequest request, @RequestBody String userName) 

Кроме того, если вы передаете строку, я предлагаю добавьте простой конвертер строки http в конвертеры шаблона останова и аннотируйте метод сервера с помощью @Consumes(text/plain). Таким образом вы получите его как простую строку.

+0

'@ RequestBody' в каком методе? В контроллере API? –

+0

@ user2391060 Вы пытаетесь получить параметр запроса (POST или GET), однако вы отправляете JSON. В объекте HttpServletRequest не будет параметра. Поэтому вам нужно сообщить Spring, что ему нужно преобразовать тело запроса в объект JSON. '@RequestBody Map params' должен быть параметром вашего метода контроллера. –

+0

Пожалуйста, взгляните на мои правки. – Avi