我在Spring boot data rest中使用MongoRepository,它工作得很好,不需要实现我自己的控制器。但是我想把“注册日期”放在我新创建的对象中,默认实现不支持这个。我需要实现我自己的自定义控制器,以便在每个新对象中添加额外的字段。问题是当我实现我自己的控制器时,HATEOAS停止工作。
存储库类:
@RepositoryRestResource(collectionResourceRel = "users", path = "users")
public interface UserRepository extends MongoRepository<User, String> {
}
控制器类:
@RestController
@RequestMapping("/users")
public class UserController {
@Autowired
UserRepository repository;
@RequestMapping(method = RequestMethod.GET)
public ResponseEntity<List<User>> getAll() {
List<User> list = repository.findAll();
return new ResponseEntity<>(list, HttpStatus.OK);
}
带有此自定义控制器的有效负载如下所示:
[
{
"id": "571de80ebdabf25dd6cdfb73",
"username": "mark",
"password": "mark123",
"email": "mark@gmail.com",
"createdAt": "2016-04-25 11:49"
},
{
...
没有我的自定义控制器的有效载荷如下所示:
{
"_embedded": {
"users": [
{
"username": "mark",
"password": "mark123",
"email": "mark@gmail.com",
"createdAt": "2016-04-25 11:49",
"_links": {
"self": {
"href": "http://localhost:8080/users/571de80ebdabf25dd6cdfb73"
},
"user": {
"href": "http://localhost:8080/users/571de80ebdabf25dd6cdfb73"
}
}
},
{
.....
我尝试使用@RepositoryRestController
而不是@RestController
但没有帮助。我想知道是否有另一种方法可以将“注册日期”放入新创建的对象中,而无需实现自己的自定义控制器?如果没有,我可以做什么HATEOAS才能再次工作?
我解决了我的问题,多亏了给我一个视角的评论:)
1 - 具有资源支持功能的扩展用户类。(注意:不要只使用 id
作为 userId,
因为 ResourceSupport 需要 getId()
方法。
public class User extends ResourceSupport {
@Id
private String userId;
2-更新了我的控制器类
import static org.springframework.hateoas.mvc.ControllerLinkBuilder.linkTo;
@RequestMapping(method = RequestMethod.GET)
public ResponseEntity<List<User>> getAll() {
List<User> list = repository.findAll();
for(User user : list) {
Link self = linkTo(UserController.class).slash(user.getUserId()).withSelfRel();
Link users = linkTo(UserController.class).slash(user.getId()).withRel("users");
user.add(self);
user.add(users);
}
return new ResponseEntity<>(list, HttpStatus.OK);
}
现在,我的有效载荷看起来像这样:
[
{
"userId": "571e44ecbdab7b1ffc668f02",
"username": "newton",
"password": "gravity",
"email": "nevton@gmail.com",
"createdAt": "2016-04-25 18:
"links": [
{
"rel": "self",
"href": "http://localhost:8080/users/571e44ecbdab7b1ffc668f02"
},
{
"rel": "users",
"href": "http://localhost:8080/users"
}
]
},
{
....
自定义路由 easySwoole支持路由拦截。其路由利用fastRoute实现,因此其路由规则与其保持一致,该组件的详细文档请参考 GitHub文档 路由定义 若需要再easySwoole使用路由拦截功能,请在应用目录(默认为App)下,建立Router类,井继承Core\AbstractInterface\AbstractRouter实现addRouter方法,如果在类UNIX系统下请严格注意文
本文向大家介绍C#画笔Pen绘制自定义线的帽子,包括了C#画笔Pen绘制自定义线的帽子的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#画笔Pen绘制自定义线的帽子。分享给大家供大家参考。具体如下: 希望本文所述对大家的C#程序设计有所帮助。
我试图向RepositoryRestResource中自动生成的endpoint添加一些额外的业务逻辑。请参见下面的代码: 资源: 控制器: 我看过下面两篇stackoverflow的文章: 我可以让自定义控制器镜像Spring-Data-Rest / Spring-Hateoas生成的类的格式吗? 在自定义控制器方法的 Spring Boot 中启用 HAL 序列化 我觉得我很接近了,但我面临的
easySwoole支持REST风格开发。在实现上,其实是对AbstractController进行了REST规则封装,本质上,也是一个控制器。 支持GET、POST、PUT、PATCH、DELETE、HEAD、OPTIONS。 实例代码 namespace AppControllerRest; use CoreAbstractInterfaceAbstractREST; use CoreHttp
嗨,我用spring初始化器创建了一个简单的Spring Boot应用程序。我在主应用程序类的同一文件夹中添加了一个控制器。 这是给我以下错误的网址http://localhost:8080/welcome 此应用程序没有针对/错误的显式映射,因此您将其视为回退。 Sat Dec 19 12:51:44 IST 2020出现意外错误(类型=未找到,状态=404)。 如果我使用@restContro