【发布时间】:2015-10-27 22:27:01
【问题描述】:
在遵循https://spring.io/guides/gs/accessing-mongodb-data-rest/ 的非常有用的教程之后,我正在尝试创建一个链接缩短器应用程序。我编写了一个 URL 类(带有 id、longURL 和 hash 属性)和 URLRepository 类(目前,只有 findByHash 方法,如演示中所示)。请注意,“散列”是指由尚未实现的方法生成的随机短字符串,而不是像 MD5 这样的实际散列函数。例如,只需致电独立的generateHash(String URL)
我可以使用 Spring 提供的 REST 接口将新条目添加到数据库中,也可以获取它们。但是,我想让应用程序自己生成哈希并在存储之前进行一些检查和处理 - 主要检查 URL 是否尚未存储,在这种情况下它只会返回现有的哈希。
我想我必须在我的URLRepository 类下扩展SimpleMongoRepository 的<S extends T> List<S> save(Iterable<S> entites); 方法(由MongoRepository 扩展),但我不确定该怎么做。我也看到了insert方法,不知道应该用哪个
URL.java
public class URL {
@Id private String id;
private String longURL;
private String hash;
public String getLongURL() {
return longURL;
}
public void setLongURL(String longURL) {
this.longURL = longURL;
}
public String getHash() {
return hash;
}
public void setHash(String Hash) {
this.hash = Hash;
}
}
URLRepository.java
import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.data.repository.query.Param;
import org.springframework.data.rest.core.annotation.RepositoryRestResource;
import org.springframework.util.Assert;
@RepositoryRestResource(collectionResourceRel = "urls", path = "urls")
public interface URLRepository extends MongoRepository<URL, String> {
List<URL> findByHash(@Param("hash") String hash);
}
【问题讨论】:
-
不,扩展
SimpleMongoRepository通常不是要走的路。您介意在您要实现的目标上添加一些示例(伪)吗?从散文中消化有点困难。另外“让应用程序自己生成哈希”到底是什么意思?目前是如何获取hash的? -
我会马上给我的代码做广告,对不起!目前,我可以发送一个包含所需长 URL 及其哈希的 POST 请求。但是我想要的是只发送长 URL 并让应用程序以任何方式生成哈希(不必是实际的哈希,它可以是随机字符串或其他任何东西,实现尚未完成并且是开放的未来的变化)
-
一个很酷的功能是允许提交两种类型的链接:(a) 长 URL 并让应用程序生成并返回其哈希值,或者 (b) 发送长 URL 和建议的哈希值,让应用程序返回散列本身,或者如果散列已经存在/无效/发生其他问题,则会出现错误消息。但我很高兴至少现在有选项(a)。
标签: spring mongodb spring-mvc spring-boot spring-data-mongodb