前端请求到后端的json字符串,需要获取json字符串的值
前端请求的字符串大概是这样的
{
"username":"root",
"password":"123456"
}
可使用ObjectMapper对象转化
try(BufferedReader buffer = servletRequest.getReader()){
String body = buffer.lines().reduce(String::concat).orElseThrow(IllegalArgumentException::new);
//创建jsonNode对象
JsonNode jsonNode = objectMapper.readTree(body);
username = jsonNode.get("username").asText();
password = jsonNode.get("password").asText();
}catch(IOException e){
...
}
解释:
- buffer为BufferedInputStream,
- lines()为流的方法,读取行
- reduce() java8新特性方法
- concat() 拼接字符串
- orElseThrow(IllegalArgumentException::new)抛出异常,相当于throw new IllegalArgumentException()
- objectMapper为ObjectMapper的对象
- try-resource-catch 为java7特性,此形式无需手动关闭流
这样就可以获取username和password的值了
更新,后来使用了阿里的fastJson包之后就变得更加简单了
加入如下依赖即可
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.48</version>
</dependency>
try(BufferedReader buffer = servlet.getReader()){
String body = buffer.lines().reduce(String::concat).orElseThrow(IllegalArgumentException::new);
JsonObject jsonObject = JsonObject.parseObject(body);
String username = jsonObject.getString("username");
String password = JsonObject.getString("password");
}catch(IOException e){
...
}
解析的时候还可以这么写,直接将参数解析成java对象
//省略...
String body = buffer.lines().reduce(String::concat).orElseThrow(IllegalArgumentException::new);
User user = JsonObject.parseObject(body,User.class);
String username = user.getUsername();
String password = user.getPassword();
//省略...