2

我在一些网络服务器上工作,我必须向网络服务发送一些数据并取回状态码。我想这可能应该是 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 emply?

请帮帮我

4

3 回答 3

1

通常我会说这应该是一个 GET,但我注意到你有socialSecurityNumber作为你的参数之一。您绝对不希望它成为您的 URL 的一部分。查看RFC 2616 第 15.1.3 节

使用 HTTP 协议的服务的作者不应该使用基于 GET 的表单来提交敏感数据,因为这将导致该数据被编码在 Request-URI 中。许多现有的服务器、代理和用户代理会将请求 URI 记录在第三方可能看到的某个地方。服务器可以改用基于 POST 的表单提交

做一个 POST。

于 2013-06-19T15:34:08.157 回答
1

ModelMap填充您的内容,您可能需要使用@RequestBody.

正如评论指出的那样,根据规范,您不能拥有带有 GET 的请求正文。因此,您需要将参数作为 URL 的一部分并使用 get 或转换为 POST。

尽管 POST 似乎不符合您通话的目的。

于 2013-06-19T15:03:17.863 回答
0

得到因为它没有改变任何服务器上的东西只是在这里返回数据是规范

使用这样的请求参数

@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
{
于 2013-06-19T15:00:26.123 回答