servlet req.getParameter()获取不到json参数
时间: 2024-01-17 14:05:49 浏览: 26
,该怎么办?
如果您无法通过req.getParameter()获取JSON参数,可以采用以下方法:
1. 使用InputStream读取请求体
您可以在servlet中获取输入流并读取请求体中的JSON数据。以下是示例代码:
```java
BufferedReader reader = request.getReader();
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line);
}
String jsonStr = sb.toString();
```
2. 使用第三方库
您也可以使用第三方库,如Jackson或Gson,将JSON数据反序列化为Java对象。以下是示例代码:
```java
ObjectMapper mapper = new ObjectMapper();
MyObject obj = mapper.readValue(request.getInputStream(), MyObject.class);
```
其中,MyObject是您期望的Java对象,可以根据实际情况作出调整。
希望这可以帮助您解决问题。
相关问题
package com.lanou.servlet.role; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.lanou.bean.Admin; import com.lanou.bean.Result; import com.lanou.bean.Role; import com.lanou.service.AdminService; import com.lanou.service.RoleMenuService; import com.lanou.service.impl.AdminServiceImpl; import com.lanou.service.impl.RoleMenuServiceImpl; import com.lanou.util.FastJSONUtil; @WebServlet("/admin/delRole") public class DeleteRole extends HttpServlet{ private static final long serialVersionUID = 1L; RoleMenuService roleMenuService = new RoleMenuServiceImpl(); @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { Role role = (Role) req.getSession().getAttribute("role"); long roleId = Long.parseLong(req.getParameter("roleId")); boolean isDelete = false; // 只有超级管理员 有权限删除 if (role.getRoleId() == 1) { isDelete = roleMenuService.delRMByRoleId(roleId); } Result result = null; if (isDelete) { result = new Result(0, "删除成功", null, null); }else { result = new Result(1, "删除失败", null, null); } System.out.println(result.getCode()); resp.setContentType("type/json;charset=utf-8"); resp.getWriter().write(FastJSONUtil.entityToJson(result)); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); } }
这是一个名为`DeleteRole`的`Servlet`类,用于处理删除角色的请求。下面是代码的解析:
1. `doGet()`方法用于处理`GET`请求。
2. 从会话中获取当前登录用户的角色对象:
```java
Role role = (Role) req.getSession().getAttribute("role");
```
3. 从请求参数中获取要删除的角色的ID,并将其转换为`long`类型:
```java
long roleId = Long.parseLong(req.getParameter("roleId"));
```
4. `isDelete`变量用于表示是否成功删除角色,默认为`false`。
5. 只有超级管理员(角色ID为1)有权限删除角色,因此在此条件下进行删除操作:
```java
if (role.getRoleId() == 1) {
isDelete = roleMenuService.delRMByRoleId(roleId);
}
```
`roleMenuService.delRMByRoleId(roleId)`是一个删除与角色相关联的菜单权限的方法,根据`roleId`参数执行删除操作并返回结果。
6. 创建一个`Result`对象来表示操作结果,根据`isDelete`的值设置不同的状态和消息:
```java
Result result = null;
if (isDelete) {
result = new Result(0, "删除成功", null, null);
} else {
result = new Result(1, "删除失败", null, null);
}
```
7. 打印结果代码:
```java
System.out.println(result.getCode());
```
8. 设置响应的内容类型为JSON,并将结果对象转换为JSON字符串并写入响应:
```java
resp.setContentType("type/json;charset=utf-8");
resp.getWriter().write(FastJSONUtil.entityToJson(result));
```
9. `doPost()`方法直接调用`doGet()`方法,以便处理`POST`请求。
springboot filter获取不到post请求参数
Spring Boot中的Filter是一种拦截所有请求的方式,无论是GET请求还是POST请求都会被Filter拦截到。但是有时候会遇到Filter获取不到POST请求参数的情况,这时候需要检查一下请求头中的Content-Type是否是application/x-www-form-urlencoded。
如果Content-Type是application/x-www-form-urlencoded,则需要通过HttpServletRequest.getParameter()方法来获取请求参数。例如:
``` java
public class MyFilter implements Filter {
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
// 获取请求参数
String param1 = request.getParameter("param1");
String param2 = request.getParameter("param2");
...
// 继续处理请求
chain.doFilter(request, response);
}
}
```
如果Content-Type是application/json,则需要通过读取请求体来获取请求参数。例如:
``` java
public class MyFilter implements Filter {
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
// 获取请求体
BufferedReader reader = request.getReader();
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line);
}
// 解析JSON参数
JSONObject json = JSONObject.parseObject(sb.toString());
String param1 = json.getString("param1");
String param2 = json.getString("param2");
...
// 继续处理请求
chain.doFilter(request, response);
}
}
```
总之,要根据请求头中的Content-Type来确定获取POST请求参数的方法,否则会导致获取不到参数的情况。