gpt4 book ai didi

json - 在spring json响应中添加绝对url

转载 作者:行者123 更新时间:2023-12-04 11:09:50 26 4
gpt4 key购买 nike

我正在使用 spring 框架构建一个 RESTful Web 服务。我发送的 JSON 响应包含图像 URL。图像 URL 作为相对路径存储在数据库中,但为了避免客户端紧密耦合,我希望响应包含绝对 URL。

例如:
而不是返回一个像

{"username": "user123", "profile_picture": "/user123_profile.jpg"}
I want to return a json like
{"username": "user123", "profile_picture": "http://example.com/user123_profile.jpg"}

当然,图像字段可以在响应中的任何位置,也可以在嵌套对象中。

拦截任何返回的响应并将图像字段转换为绝对 URL 的最佳位置是什么?

我想创建一个特殊的注释,如 @ImageURL对于图像字段,然后定义 @ControllerAdvice在方法 beforeBodyWrite() ,我会遍历所有字段,每当我发现一个带有注释的字段时 @ImageURL ,我添加了它的绝对路径。这很有效,并且可以轻松定义新的图像字段,但是对于我认为不好的每个请求/响应,都会有很多反射(reflection)。

有更好的建议吗?

最佳答案

在 Spring REST HATEOAS https://spring.io/guides/gs/rest-hateoas/ 解决的问题中,这类问题似乎很准确。

以下仅作为示例说明 API 的工作原理(以此作为说明性示例,有关 Spring HATEOAS API 的详细信息请查看官方文档):

@RequestMapping(value="/user/{id}", method=RequestMethod.GET)
HttpEntity<MyUserResource> getUser( @PathVariable("id") long id )
{
MyUserResource resource = new MyUserResource( ... retrieve from db user data ... );
.
.
.
resource.add(linkTo(methodOn(MyServiceController.class).getProfilePicture( ...profile picture relative URL... )).withRel("profile_picture"));
.
.
.
return new ResponseEntity<MyUserResource>(resource, HttpStatus.OK);
}

在上面的代码中,我做了以下假设: Controller 被命名为 MyServiceController除了上面显示的 GET 方法来检索用户数据之外,它还有第二个 getProfilePicture响应 GET "/user/{id}/profile_picture/{profile picture relative url}" 等 URL 的方法,返回实际的图像文件内容。

Spring REST HATEOAS 提供的方法(如 linkTo、methodOn 等)将负责生成对服务的后续 REST 调用的绝对 URL 映射。

所以,当调用 http://example.com/myservice/user/123 ,这将向客户端返回一个类似于以下内容的 JSON 对象:
{
"username":"user123",
"links": [
{
"rel": "profile_picture",
"href":"http://example.com/myservice/user/123/profile_picture/user123_profile.jpg"
}
]
}

从这里,客户端将知道在您的 REST 服务上调用标记为 profile_picture 的 _link 以获取图像内容的绝对 URL。

关于json - 在spring json响应中添加绝对url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34216797/

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