Moh*_*ana 0 java rest spring spring-mvc spring-boot
下面是我的控制器方法定义
@Autowired
private HttpServletRequest request;
@PostMapping(path = "/abc")
public String createAbc(@RequestBody HttpServletRequest request)
throws IOException {
logger.info("Request body: "+request.getInputStream());
return "abc";
}
Run Code Online (Sandbox Code Playgroud)
我想要做的就是打印内容以请求正文。但是当我发出 POST 请求时,我看到以下错误:
类型定义错误:[简单类型,类javax.servlet.http.HttpServletRequest];嵌套异常是 com.fasterxml.jackson.databind.exc.InvalidDefinitionException:无法构造实例
javax.servlet.http.HttpServletRequest(没有创建者,如默认构造,存在):抽象类型要么需要映射到具体类型,有自定义反序列化器,要么包含其他类型信息\n 在 [来源: (PushbackInputStream); 行:1,列:2]",
我使用的是 Spring boot 2.x 版本。知道我的代码有什么问题吗?
And*_*eas 12
首先,删除@Autowired字段。这是错误的,无论如何你都没有使用它。
现在你有两个选择:
让 Spring 为您处理请求正文,通过使用@RequestBody注释:
@PostMapping(path = "/abc")
public String createAbc(@RequestBody String requestBody) throws IOException {
logger.info("Request body: " + requestBody);
return "abc";
}
Run Code Online (Sandbox Code Playgroud)自己处理,即不使用@RequestBody注解:
@PostMapping(path = "/abc")
public String createAbc(HttpServletRequest request) throws IOException {
StringBuilder builder = new StringBuilder();
try (BufferedReader in = request.getReader()) {
char[] buf = new char[4096];
for (int len; (len = in.read(buf)) > 0; )
builder.append(buf, 0, len);
}
String requestBody = builder.toString();
logger.info("Request body: " + requestBody);
return "abc";
}
Run Code Online (Sandbox Code Playgroud)不知道为什么要使用选项 2,但如果您愿意,可以使用。
| 归档时间: |
|
| 查看次数: |
18257 次 |
| 最近记录: |