【发布时间】:2014-12-04 10:10:55
【问题描述】:
使用 REST api 创建或列出项目时,我还会返回整个资源路径。
例如,创建人员记录返回http://service:9000/person/1234作为响应。为了获得像http://service:9000 这样的架构、主机和端口部分,我从HttpServletRequest.getRequestURL() 获得的URL 中提取它。
示例(不是生产代码,但概念上相同):
@RequestMapping(value = "/person", method = RequestMethod.PUT)
public Object putPerson(
@RequestParam(value = "name") String name,
HttpServletRequest req) {
long id = createPerson(name);
String uriStart = RestUtils.getSchemeHostPortUrlPart(req
.getRequestURL().toString());
String uri = uriStart + "/person/" + id;
Person person = new Person(name, id, uri);
return person; //Serialized to json by Spring & Jackson
}
//Simple bean-like class
public class Person {
//Getter methods for uri, name & id
}
由于这是一个在每种方法中都重复的样板代码,我想知道 Spring 是否不支持这一点,这在阅读它的文档时让我无法理解。
我的意思是在不需要HttpServletRequest 的情况下访问任一 URL,甚至更好的是仅访问其架构、主机、端口部分。
【问题讨论】:
-
您能否更新以显示您对 URL 的操作?
-
如果是认真的工作,注意:在现实世界中,应用服务器通常出于安全原因隐藏在反向代理后面:应用服务器知道的主机端口是 不是用户使用的那个。反向代理尽最大努力应对这种情况,但需要注意的是……
标签: java spring rest spring-mvc web-applications