mem*_*und 1 java spring servlets spring-web
我有一个简单的servlet,如下所示:
@RestController
public class TestServlet {
@RequestMapping(value = "/test1")
public String test1() {
return "test1";
}
@RequestMapping(value = "/test2")
public String test2(@RequestBody TestClass req) {
return "test2";
}
public static class TestClass {
private String value;
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是,只有不接收参数的servlet才起作用:
作品: http://localhost:8080/test1
不起作用: http://localhost:8080/test2?value=1234
org.springframework.http.converter.HttpMessageNotReadableException:缺少必需的请求正文:public java.lang.String
为什么@RequestBody注释不起作用?我错过了重要的一块吗?
一之间的区别@Controller,并@RestController是,你不必编写@RequestBody和@ResponseBody,这意味着在你的控制器方法的任何参数,它不具有注释(如@PathVariable,@ModelAttribute...)将隐含有@RequestBody,因此必须张贴HTTP实体主体。因此,您需要在POST中发送JSON / XML。您要做的是将数据作为URL的一部分发送,这使其成为请求参数而非主体数据,并且您需要@RequestParam从URL提取数据。
另外,我建议您在注释中使用@GetMapping/ @PostMapping或包含method参数,@RequestMapping因为您不太可能希望将服务用于POST和GET,因此在控制器方法说明中应尽可能具体,以限制错误情况。
| 归档时间: |
|
| 查看次数: |
7567 次 |
| 最近记录: |