春天REST API我只是跟着这个教程 https://spring.io/guides/tutorials/react-and-spring-data-rest/与Web应用程序
而且这真的很有趣,但我想知道怎样才能创建相同的应用程序,而无需使用弹簧启动,我想它在Tomcat Web容器部署。
在瘾我想也到上下文路径添加到应用程序将在本地主机上运行:8080/APPNAME /应用程序和API将本地主机上运行:8080/APPNAME /网络
谢谢!
春天REST API我只是跟着这个教程 https://spring.io/guides/tutorials/react-and-spring-data-rest/与Web应用程序
而且这真的很有趣,但我想知道怎样才能创建相同的应用程序,而无需使用弹簧启动,我想它在Tomcat Web容器部署。
在瘾我想也到上下文路径添加到应用程序将在本地主机上运行:8080/APPNAME /应用程序和API将本地主机上运行:8080/APPNAME /网络
谢谢!
你行你的Spring MVC
@Configuration
@EnableWebMvc
public class WebConfig{
//
}
@EnableWebMvc注释做了一些有益的事情 - 具体而言,在静止的情况下,检测到类路径 并自动创建杰克逊和JAXB 2的存在并注册默认的JSON和XML转换器。
@Controller是RESTful API的整个Web层中的中心工件。对于这篇文章的目的,控制器造型简单的REST资源 - 美孚:
@Controller
@RequestMapping(value = "/foos")
class FooController{
@Autowired
IFooService service;
@RequestMapping(method = RequestMethod.GET)
@ResponseBody
public List<Foo> findAll(){
return service.findAll();
}
@RequestMapping(value = "/{id}", method = RequestMethod.GET)
@ResponseBody
public Foo findOne(@PathVariable("id") Long id){
return RestPreconditions.checkFound(service.findOne(id));
}
@RequestMapping(method = RequestMethod.POST)
@ResponseStatus(HttpStatus.CREATED)
@ResponseBody
public Long create(@RequestBody Foo resource){
Preconditions.checkNotNull(resource);
return service.save(resource);
}
@RequestMapping(value = "/{id}", method = RequestMethod.PUT)
@ResponseStatus(HttpStatus.OK)
public void update(@PathVariable("id") Long id, @RequestBody Foo resource){
Preconditions.checkNotNull(resource);
RestPreconditions.checkNotNull(service.findOne(resource.getId()));
//update logic
service.save(resource);
}
@RequestMapping(value = "/{id}", method = RequestMethod.DELETE)
@ResponseStatus(HttpStatus.OK)
public void delete(@PathVariable("id") Long id){
service.delete(id);
}
}
的控制器实现非公开 - 这是因为它并不需要的人。通常,控制器是依赖关系链中的最后一个 - 它接收来自Spring前端控制器(DispathcerServlet)的HTTP请求,并简单地将它们转发给服务层。如果没有控制器必须通过直接引用被注入或操纵的用例,那么我宁愿不宣称它是公开的。
请求映射很简单 - 与任何控制器一样,映射的实际值以及HTTP方法用于确定请求的目标方法。 @RequestBody将方法的参数绑定到HTTP请求的主体,而@ResponseBody对响应和返回类型也是如此。他们还确保使用正确的HTTP转换器对资源进行编组和解组。内容协商将主要基于Accept头来选择使用哪一个活动转换器,尽管其他HTTP头也可用于确定表示。 这里是有帮助tutorial
春数据 让我们来看看IFooService
,它在我们的控制器用于基本curd operation
IFooService.java
public interface IFooService extends CrudRepository<Foo, Long> {
}
春数据保存我们的生活,春天的数据一个高级别的SpringSource项目,其目的是统一并简化对不同类型的持久存储(关系数据库系统和NoSQL数据存储)的访问。
这里IFooService
扩展了CrudRepository,我们将Foo作为实体进行传递,将Long作为泛型参数中的Foo id类型。 如果将在FooController
IFooService看到的是自动装配和我们使用的有以下几种方法:
的findAll,findOne,保存,删除
我们不以IFooService
已经提供了这些方法的实现,实际上,这些方法来自CrudRepository
意思是凝乳操作正在处理的春季数据很省时间here是CrudRepository
doc也可以学到很多关于春季数据的信息here
这是非常好的实现,但我必须用这种方式编写大量的样板代码。事实是,我想使用'CrudRepository
@LorenzoDeFrancesco yes CrudRepository是春季资料的一部分,我在回复中更新了春季资料图片中的服务部分,请看看 –
太棒了,我明白了! 但是如何控制器,是否可以在不写控制器的情况下以标准方式公开我的服务? –
尝试查看此https://docs.spring.io/docs/Spring-MVC-step-by-step/part1.html –
是否要将其部署到Tomcat容器中而不使用Spring引导?因为如果问题只是在Tomcat中部署它,您还可以使用“spring-boot-maven-plugin”将Spring引导应用程序打包为war而不是jar,并将其部署到Tomcat中,而不会出现任何问题。 –
好吧,也许这个问题有点不对,事实是我想用'CrudRepository'和'PagingAndSortingRepository '接口部署我的web应用程序后端,以加速我的开发并避免编码大量的样板文件码。 前端将使用Reat + Weback + redux进行开发。 我也认为春季启动向我的应用程序添加了大量无用的代码(一个Web容器实现),因为它必须部署到容器中,不是吗? –