你可以使用 Spring mvc
@Configuration
@EnableWebMvc
public class WebConfig{
//
}
@EnableWebMvc 注释做了很多有用的事情——特别是,在 REST 的情况下,它检测到类路径中 Jackson 和 JAXB 2 的存在
并自动创建和注册默认的 JSON 和 XML 转换器。
@Controller 是 RESTful API 的整个 Web 层中的核心构件。出于本文的目的,控制器正在建模一个简单的 REST 资源 - Foo:
@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 );
}
}
Controller 实现是非公开的——这是因为它不需要公开。通常,控制器是依赖链中的最后一个——它从 Spring 前端控制器(DispathcerServlet)接收 HTTP 请求,并将它们简单地委托给服务层。如果没有必须通过直接引用注入或操作控制器的用例,那么我宁愿不将其声明为公共的。
请求映射很简单——与任何控制器一样,映射的实际值以及 HTTP 方法用于确定请求的目标方法。 @RequestBody 将方法的参数绑定到 HTTP 请求的主体,而 @ResponseBody 对响应和返回类型执行相同的操作。他们还确保使用正确的 HTTP 转换器对资源进行编组和解组。将进行内容协商以选择将使用哪一个活动转换器,主要基于 Accept 标头,尽管也可以使用其他 HTTP 标头来确定表示形式。
这里很有帮助tutorial
春季数据
让我们看看IFooService,它在我们的控制器中用于基本curd operation
IFooService.java
public interface IFooService extends CrudRepository<Foo, Long> {
}
Spring Data 拯救了我们的生命,Spring Data 是一个高级 SpringSource 项目,其目的是统一和简化对不同类型持久性存储的访问,包括关系数据库系统和 NoSQL 数据存储。
这里IFooService 扩展了 CrudRepository,我们将 Foo 作为实体传递,Long 作为泛型参数中的 Foo id 类型传递。
如果您将在FooController 中看到 IFooService 是自动装配的,我们正在使用以下方法:
findAll,findOne,保存,删除
IFooService中没有提供这些方法的实现
,实际上,这些方法来自 CrudRepository 意味着 curd 操作是由 spring 数据处理的,这节省了很多时间 here 是 CrudRepository doc 你也可以从 here 了解很多关于 spring 数据的信息