我正在攻读Spring Core认证,对于要求更改此方法的执行内容我有以下疑问:
/**
* Adds a Beneficiary with the given name to the Account with the given id,
* setting its URL as the Location header on the response.
*/
// TODO 11: Complete this method. Add annotations to respond to a
// POST /accounts/{accountId}/beneficiaries containing a beneficiary name
// with a 201 Created status
@RequestMapping(value = "/accounts/{accountId}/beneficiaries", method = RequestMethod.POST)
@ResponseStatus(HttpStatus.CREATED)
public void addBeneficiary(
long accountId,
String beneficiaryName,
HttpServletRequest request,
HttpServletResponse response) {
accountManager.addBeneficiary(accountId, beneficiaryName);
// TODO 12: Set the Location header on the Response to the location of the created beneficiary.
// Note the existing entityWithLocation method below.
}
根据前面代码片段中显示的TODO进入RESTfull方法。
这是解决方案,但我有一些问题需要了解它是如何工作的:
/**
* Adds a Beneficiary with the given name to the Account with the given id,
* setting its URL as the Location header on the response.
*/
@RequestMapping(value = "/accounts/{accountId}/beneficiaries", method = RequestMethod.POST)
@ResponseStatus(HttpStatus.CREATED)
public HttpEntity<String> addBeneficiary(
@PathVariable("accountId") long accountId,
@RequestBody String beneficiaryName,
@Value("#{request.requestURL}") StringBuffer url) {
accountManager.addBeneficiary(accountId, beneficiaryName);
return entityWithLocation(url, beneficiaryName);
}
所以 TODO 11 向我询问以下内容:添加注释以回复 POST / accounts / {accountId} /受益人,其中包含受益人姓名< strong> 201创建状态。
所以我认为提出的解决方案是这样运作的:
使用 @RequestMapping 处理** POST Http请求**对 / accounts / {accountId} / faviciaries URL(REST样式表示资源,它是否严格?)
@RequestMapping(value = "/accounts/{accountId}/beneficiaries", method = RequestMethod.POST)
其中 {accountId} 是路径变量。例如,此方法处理的网址类似于&#34; / accounts / 123 /受益人&#34;其中 123 值存储在名为 accountId 的变量中,然后我可以在我的代码中使用,实际上是 @PathVariable 注释我检索到这个我用作 addBeneficiary()方法的输入参数的值。
@ResponseStatus(HttpStatus.CREATED)注释将响应的状态设置为 201 ,表示新资源已正确创建。
好的,现在我的主要疑虑如下:
1) addBeneficiary()方法输入参数之一是:
@RequestBody String beneficiaryName
我认为它从HttpRequest中提取 String beneficiaryName ,是不是。但是,如果以这种方式工作,调用者(发送HttpRequest的人)如何将此参数放入Http请求?
2)进入原始方法(改为运动解决方案的方法)有这两个输入参数: HttpServletRequest请求和 HttpServletResponse响应我认为代表 HttpRequest 和 HttpResponse 由旧式Servlet应用程序处理。
这些参数由以下参数替换:
@Value("#{request.requestURL}") StringBuffer url
我认为它检索生成HttpRequest的URL。是不是?
这是一回事吗?:
HttpRequest request.getRequestURL();
答案 0 :(得分:0)
以下是您的问题的答案。
调用者可以触发将JSON传递给控制器的ajax请求。这是发送将使用@RequestBody注释提取的数据的方法之一。当调用者使用JSON数据执行ajax发布时,Spring将使用转换器进行转换并将其传递给您的方法。您需要在类路径上安装JACKSON jar。