2015-05-22 3 views
0

Я посылаю JSON данные:Как получить параметры от json весной mvc?

{ 
    "username":"[email protected]", 
    "password":"abc" 
} 

И в моем пользовательском фильтре я хочу, чтобы получить доступ к username и password

Мой фильтр:

@Override 
public void doFilter(ServletRequest request, ServletResponse response, 
     FilterChain chain) throws IOException, ServletException { 
    //code to get parameters from json 
} 
+0

Я попробовал request.getParameter («имя пользователя»), но не работает – Qasim

+0

Вы получите только JSON (как строку), прочитав с request.getInputStream() или request.getRead er() есть ... – ericbn

+0

вы можете прислать мне пример, используя приведенные выше данные json – Qasim

ответ

0

Использование Apache IO утилиты, получить JSON строку от входного потока и конвертировать строку JSON в карту:

<dependency> 
    <groupId>org.apache.commons</groupId> 
    <artifactId>commons-io</artifactId> 
    <version>${commons-io.version}</version> 
</dependency> 

@Override 

public void doFilter(ServletRequest request, ServletResponse 
response, FilterChain chain) throws IOException, ServletException { 
     try { 
      String jsonBody = IOUtils.toString(request.getInputStream()); 
      //convert json string to HashMap 
      //using http://stackoverflow.com/a/22011887/1358551 
     } catch (Exception e) { 
      logger.warn("", e); 
      return new ResponseEntity<String>(e.getMessage(), 
        HttpStatus.BAD_REQUEST); 
     } 
    } 
0

Я предложил бы использовать анализатор Google Gson

Map<String, String> extractLoginRequest(final ServletRequest request) throws IOException { 
    final StringBuffer sb = new StringBuffer(); 
    String line = null; 
    final BufferedReader reader = request.getReader(); 
    while ((line = reader.readLine()) != null) { 
     sb.append(line); 
    } 
    // as far as I know, gson might not be 100% threadsave 
    return new Gson().fromJson(sb.toString(), HashMap.class); 
} 

теперь вы можете получить доступ к параметру с

Map<String, String> loginRequest = extractLoginRequest(request); 
loginRequest.get("username") 

В случае, если вы используете Maven, это зависимость можно использовать:

<dependency> 
    <groupId>com.google.code.gson</groupId> 
    <artifactId>gson</artifactId> 
    <version>2.3.1</version> 
</dependency>