java - 在 Spring 中创建 URL 的最佳方法

标签 java spring rest jakarta-ee spring-mvc

假设我们有带有 URL 映射的 Controller ,例如 movie/{id}-{title}actor/{id}-{name} 等。这些映射识别我们应用程序中的一些对象,主要是实体 - 我们可以说它是一个 RESTful 服务。

我正在寻找一个解决方案,以了解应该将负责创建这些 URI 的方法放在哪里。我认为在多个 JSP 文件和其他一些地方(重定向等)创建它们是多余的。

首先,我想到的是使用方法 public URI getURI() 创建一些接口(interface),将在 Controller 中使用的类将实现该接口(interface)。但是,在我看来,这会涉及太多实体 - 我更喜欢实体仅代表数据并仅包含更改状态的方法。

我的第二个想法是创建一个带有重载方法的URIService,例如URI getURI(Movie m)URI getURI(Actor a),但编译时重载方法的选择会出现问题。例如,在 JSP 中的 EL 中,这不会很好地工作,因为解决方案将以不同的方式命名方法。

我不想重新发明轮子,所以也许你知道或使用一些解决方案来解决这个问题?

最佳答案

您希望解决方案有多进取? (我只是半开玩笑)

这里有一个解决方案:拥有一个具有 URI getURI(Object o) 之类的方法的服务。此方法将检查传递的对象是否属于带有指定 URI 路径的注释的类。注释示例:

public @interface PathTemplate {String value();}

带有注释的示例类:

@PathTemplate("/movie/{title}-{id}")
public class Movie {
  private int id;private String title;
  // getters and setters too
}

现在,getURI 方法将看到参数对象的类具有 PathTemplate 注释,并将使用 bean 自省(introspection)来插入参数。瞧!可扩展且相对解耦的 URI 生成。

关于java - 在 Spring 中创建 URL 的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18088708/

相关文章:

java - Hibernate 在启动时调用静态服务

java - 使用 MyBatis 动态列名与 where 子句中的值进行比较

java - 我使用 Jersey 生成了 400 响应,但没有得到返回

ios - 有没有办法在 Alamofire api 请求的响应等待期间显示事件指示器或进度条?使用 swift

android - Android 中的 REST 和 SOAP 网络服务

java - 如何正确管理具有 OneToOne 双向关系的关联 JPA 实体?

java - 带有多个复选框的对话框android源代码

java - 等待线程在 Java 中完成

java - 方法空间不足?

java - 使用 JACKSON 将 JAXB 转换为 JSON