我正在开发一些Web服务器,我必须将一些数据发送到Web服务并获取状态代码..我想也许这应该是一个POST而不是GET但我希望听到所有人互联网上的专业人士。
这是我使用Spring RESTTemplate的客户端代码
vars.put("lastName", "JOHN");
vars.put("firstName", "SMITH");
vars.put("middleInitial", "");
vars.put("socialSecurityNumber", "111-11-1111");
vars.put("Type","A");
vars.put("FileNumber","");
vars.put("EISNumber","");
String jsonreturn = restTemplate.getForObject("http://" + mRESTServer.getHost() + ":8080/services/api/checkstatus", String.class, vars);
现在这是我的服务端代码(Spring MVC RESTful服务)。我认为我在客户端输入的所有字段都在ModelMap对象中但不是
@RequestMapping(value = "/checkstatus", method = RequestMethod.get)
@ResponseBody
public ResponseEntity<String> getCheckEnrollStatus(ModelMap model) throws ResourceNotFoundException
{
logger.debug("Looking for Status: " + model.toString());
}
所以我有两个问题:
1)由于向服务器发送了大量数据,我是否应该将GET更改为POST?
2)如果我把它留下来为什么我的ModelMap很有效?
请帮帮我
答案 0 :(得分:1)
要填充ModelMap
,您可能需要使用@RequestBody
对其进行注释。
正如评论指出的那样,根据规范,你不能拥有一个带有GET的请求体。因此,您需要将参数作为URL的一部分并使用get或转换为POST。
虽然POST似乎不适合您的通话目的。
答案 1 :(得分:1)
通常我会说这应该是GET,但我注意到你有socialSecurityNumber
作为你的参数之一。你绝对不希望它成为你的URL的一部分。查看RFC 2616 section 15.1.3
使用HTTP协议的服务的作者不应该使用基于GET的表单来提交敏感数据,因为这会导致这些数据在Request-URI中编码。许多现有服务器,代理和用户代理会将请求URI记录在第三方可能看到的某个位置。服务器可以使用基于POST的表单提交
做一个POST。
答案 2 :(得分:0)
得到因为它没有改变onserver只返回数据the spec。
使用像这样的请求参数
@RequestMapping(value = "/checkstatus", method = RequestMethod.get)
@ResponseBody
public ResponseEntity<String> getCheckEnrollStatus(@RequestParam final Long id)
或uri参数,例如
@RequestMapping(value = "/checkstatus/{id}", method = RequestMethod.get)
@ResponseBody
public ResponseEntity<String> getCheckEnrollStatus(@PathVariable final Long id) throws ResourceNotFoundException
{