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 次 |
最近记录: |