gpt4 book ai didi

java - Spring MVC 请求映射 - 完整请求 URI

转载 作者:行者123 更新时间:2023-12-02 13:35:49 25 4
gpt4 key购买 nike

使用 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,甚至更好的是仅访问其架构、主机、端口部分。

最佳答案

文档提供了很多examples用于使用 UriComponentsBuilder 构造 URI。

此外,我建议您查看Spring HATEOAS如果您想将 REST API 提升到一个新的水平。

顺便说一句:PUT 意味着您将发送的内容(请求正文)放置到发送到的位置(URL)。如果什么都没有,就会创建新的东西,否则就会更新(替换)现有的东西。

这不是您的示例中发生的情况。正确的方法是 POST 到 /person 或 PUT 到该人自己的 URL,例如/person/1234,前提是您事先有 ID。

关于java - Spring MVC 请求映射 - 完整请求 URI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27291272/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com