我2天前开始学习春季启动,我已经阅读了很多文章,但不幸的是它没有按预期工作(我是Ruby on Rails开发者,我学习Java有点困难;) )
我想创建一个“简单”的REST应用程序,以便创建,获取和删除Tag类,并使用mongoDB。
我的理解是我必须使用以下内容创建TagRepository文件:
package com.petstore.repositories;
import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.data.rest.core.annotation.RepositoryRestResource;
import org.springframework.web.bind.annotation.RequestMapping;
import com.petstore.models.Tag;
@RepositoryRestResource(collectionResourceRel = "tags", path="tags")
public interface TagRepository extends MongoRepository<Tag, String> {
}
我希望能够管理以下网址:
GET: http://localhost:8080/tags
GET: http://localhost:8080/tag/:id
DELETE: http://localhost:8080/tag/:id
不幸的是我只能使用
GET: http://localhost:8080/tags
GET: http://localhost:8080/tags/:id
DELETE: http://localhost:8080/tags/:id
如果我尝试删除URL(/ tag /:id),我会收到此错误消息 不支持请求方法“DELETE”
但如果我使用删除网址(/ tags /:id),则可以正常使用。
你知道我做错了吗?
谢谢
答案 0 :(得分:0)
您需要在mongoTemplate中自动装入Spring引导程序。关于这个主题有很多线程,你可以在SO上找到如何配置它,所以你需要在这里搜索答案:
@Autowired
private MongoTemplate mongoTemplate;
然后你需要创建你的方法并使用mongotemplate查询你的mongodb:
@RequestMapping(value="/mymethod_fetch", method=RequestMethod.GET)
public List myMethod(@RequestParam String name) {
Query query = new Query();
query.addCriteria(Criteria.where("name").is(name));
query.with(new Sort(Sort.Direction.DESC, "_id"));
query.limit(10);
List<Object> obj = mongoTemplate.find(query, Object.class);
return obj;
}
这是删除的那个:
@RequestMapping(value="/mymethod_item_delete", method=RequestMethod.DELETE)
public void myMethod(@RequestParam String name) {
Query query = new Query();
query.addCriteria(Criteria.where("name").is(name));
mongoTemplate.remove(query, Object.class);
}
将浏览器指向api端点,通常为http://127.0.0.1:8080/mymethod_fetch,您将在浏览器中看到结果。
答案 1 :(得分:0)
谢谢,我会尽快尝试。
我发现了一种解决方法,但它非常难看。我覆盖了控制器中的方法。这里是PetController的一个例子:
@Autowired
private PetRepository petRepository;
@RequestMapping(value = "/pet/{id}", method = RequestMethod.GET)
@ResponseBody
public Pet findOneRemapped(@PathVariable("id") String id) {
return petRepository.findOne(id);
}
答案 2 :(得分:0)
我正在分享我的示例代码,该代码通过重命名为标记
我的主要课程
package com.example;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.data.web.config.EnableSpringDataWebSupport;
@SpringBootApplication
@EnableSpringDataWebSupport
public class SpringBootDemoApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBootDemoApplication.class, args);
}
}
我的模特课
package com.example;
import org.springframework.data.annotation.Id;
public class Tag
{
@Id
String id;
String tag;
public String getId()
{
return id;
}
public void setId(String id)
{
this.id = id;
}
public String getTag()
{
return tag;
}
public void setTag(String tag)
{
this.tag = tag;
}
}
最后是我们的存储库类
package com.example;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.data.rest.core.annotation.RepositoryRestResource;
import org.springframework.data.rest.core.annotation.RestResource;
@RepositoryRestResource(collectionResourceRel = "tags", path="tag")
public interface TagRepository extends MongoRepository<Tag, String>
{
@RestResource(path = "tags")
Page<Tag> findAll(Pageable pageable);
void delete(String tag);
}
使用上面的示例代码,您可以启动春季启动代码,当您点击http://localhost:8080/tag时,您可以看到所有代码,类似地,您可以通过点击网址http://localhost:8080/tag/:id并按http://localhost:8080/tag/:id删除来检索单个代码
下面是我用来演示上述代码的pom
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>MongoDB</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<name>SpringBootDemo</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.3.4.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-rest</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-rest-hal-browser</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
使用此代码,我们可以获得您想要的网址路径