如何使用GET实现此功能,或者它应该是Spring中的REST服务POST

时间:2013-06-19 14:41:08

标签: web-services spring spring-mvc resttemplate

我正在开发一些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很有效?

请帮帮我

3 个答案:

答案 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
{