标签: spring-data-rest

如何将spring-data-rest与spring websocket混合到一个实现中

我想将状态与所有对特定实体更改感兴趣的客户端同步.所以我想实现以下目标:

  • 在实体上公开CRUD API(通过HTTP/RESTwebsockets)
  • 并将(修改调用的)响应路由到websockets主题

从技术上讲,我对将spring-data-restspring websockets实现混合以实现类似spring-data-websocket的想法感兴趣.

我想到了两种解决方案,实际上两者都是:

  • spring-data-rest通过公开我的实体 REST/HTTP API
  • websocket 控制器(用于对实体的修改调用)

websocket控制器是这样的:

@Controller
public class EntityAWebSocketController {
      @MessageMapping("/EntityA/update")
      @SendTo("/topic/EntityA/update")
      public EntityA update(EntityA entityA) throws Exception {
           // persist,....
           return entityA;
     }
}
Run Code Online (Sandbox Code Playgroud)

场景1:Websocket API来自REST/HTTP API

规则:

  • 客户请求始终是 REST/HTTP API
  • 响应是REST/HTTP API针对所有操作的
  • 此外,对于修改操作,websocket消息也会出现

从技术上讲,可以通过以下方式实现:

仍然解决方案对我来说似乎很难过,因为我需要去:

  1. 客户端A …

java spring spring-mvc websocket spring-data-rest

32
推荐指数
1
解决办法
3741
查看次数

如何在Spring Boot中使用Spring管理的Hibernate拦截器?

是否有可能在Spring Boot中集成Spring管理的Hibernate拦截器(http://docs.jboss.org/hibernate/orm/4.3/manual/en-US/html/ch14.html)?

我正在使用Spring Data JPA和Spring Data REST,并且需要一个Hibernate拦截器来对实体上的特定字段进行更新.

使用标准JPA事件,不可能获得旧值,因此我认为我需要使用Hibernate拦截器.

hibernate spring-data spring-data-jpa spring-data-rest spring-boot

32
推荐指数
6
解决办法
4万
查看次数

Spring Data REST在不使用DTO的情况下通过REST资源公开实体是否有问题?

在我有限的经验中,我一再被告知你不应该将实体传递到前端或通过休息,而是使用DTO.

Spring Data Rest不是这样做的吗?我简要介绍了一些预测,但这些似乎只是限制了返回的数据,并且仍然期望一个实体作为post方法的参数来保存到数据库中.我在这里错过了什么,或者我(和我的同事)是不正确的,因为你不应该传递和实体?

rest spring domain-driven-design spring-data spring-data-rest

32
推荐指数
3
解决办法
5583
查看次数

在spring-data项目中使用@Version

我一直在使用带有spring-data的RESTful web服务.几天前,发布了一个特殊的spring-data jpa REST框架.

现在我注意到在这个框架中使用@Version的能力.此版本是由自己生成还是您需要手动执行此操作?

它可以自己使用@Version吗?(这样我就不必将任何内容更改为现有的存储库/域等...)

我是否需要做一些额外的配置才能使用@Version?

java hibernate spring-data spring-data-jpa spring-data-rest

30
推荐指数
2
解决办法
2万
查看次数

使用AngularJS的HATEOAS客户端

我想知道Angular中是否隐藏了某些功能,或者某些第三方库是否可以轻松创建与HATEOAS兼容的Restful客户端.

在后端,我使用Spring Data/REST生成HATEOAS JSON API.然而,消费它是另一个故事.

例如,我有这3个实体:

  • 公司 {name, address}
  • 雇员 {firstName, lastName, employer[Company]}
  • 活动 {rate, day, employee[Employee], client[Company]}

并请求一个活动(模型中最复杂的实体)产生这样的东西:

{
    links: [],
    content: [{
            rate: 456,
            day: 1366754400000,
            links: [{
                rel: "self",
                href: "http://localhost:8080/api/activities/1"
            },
            {
                rel: "activities.activity.client",
                href: "http://localhost:8080/api/activities/1/client"
            },
            {
                rel: "activities.activity.employee",
                href: "http://localhost:8080/api/activities/1/employee"
            }]
        }]
}
Run Code Online (Sandbox Code Playgroud)

我的API就REST而言(由链接标识的资源).例如,一个Activity有一个Employee.我真正想要使用的是:{rate: 456, day: 1366754400000, employee: {firstName:"xxx", lastName:"xxx" ...}}.

但是,正如您在第一个输出中看到的,我的Activity仅包含指向员工的链接,而不是其数据.Angular或第三方库中是否有任何内容可以解析这些链接并嵌入生成的数据?

有什么输入吗?

提前致谢!

rest hateoas angularjs spring-data-rest

30
推荐指数
2
解决办法
2万
查看次数

如何使用Spring RestTemplate使用Page <Entity>响应

我正在使用spring数据(mongoDb),我有我的存储库:

public interface StoriesRepository extends PagingAndSortingRepository<Story, String> {}
Run Code Online (Sandbox Code Playgroud)

然后我有一个控制器:

@RequestMapping(method = RequestMethod.GET)
public ResponseEntity<Page<StoryResponse>> getStories(Pageable pageable) {
    Page<StoryResponse> stories = storiesRepository.findAll(pageable).map(StoryResponseMapper::toStoryResponse);
    return ResponseEntity.ok(stories);
}
Run Code Online (Sandbox Code Playgroud)

一切正常,但我无法使用RestTemplate getForEntity方法使用我的端点:

def entity = restTemplate.getForEntity(getLocalhost("/story"), new TypeReference<Page<StoryResponse>>(){}.class)
Run Code Online (Sandbox Code Playgroud)

我应该提供什么类来成功反序列化我的实体页面?

java rest spring spring-data spring-data-rest

30
推荐指数
4
解决办法
2万
查看次数

Spring Data REST中的身份验证和授权

我正在实现一个基于Spring Data REST的应用程序,我想知道是否有一种优雅的方法来使用此框架或相关框架实现身份验证和授权规则.

对REST服务器的所有HTTP请求都必须带有身份验证标头,我需要检查它们并决定是否根据HTTP方法以及经过身份验证的用户与所请求资源的关联进行授权.例如,(应用程序是电子学习系统的REST服务器),教师只能访问自己的课程部分,学生只能访问他们订阅的课程部分等.

我想知道是否有一种默认方式在Spring Data REST中实现授权.如果答案是否定的,你能否就我的问题提出建议?我在考虑:

  • Servlet过滤器
  • 春季安全
  • Spring Data REST Handler(如何访问HTTP头?)

spring authorization spring-mvc spring-security spring-data-rest

29
推荐指数
1
解决办法
3万
查看次数

如何保持与Spring Data REST和JPA的双向关系?

使用Spring Data REST,如果您有一个OneToMany或一个ManyToOne关系,PUT操作会在"非拥有"实体上返回200,但实际上并不会保留已连接的资源.

示例实体:

@Entity(name = 'author')
@ToString
class AuthorEntity implements Author {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    Long id

    String fullName

    @ManyToMany(mappedBy = 'authors')
    Set<BookEntity> books
}


@Entity(name = 'book')
@EqualsAndHashCode
class BookEntity implements Book {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    Long id

    @Column(nullable = false)
    String title

    @Column(nullable = false)
    String isbn

    @Column(nullable = false)
    String publisher

    @ManyToMany(fetch = FetchType.LAZY, cascade = [CascadeType.ALL])
    Set<AuthorEntity> authors
}
Run Code Online (Sandbox Code Playgroud)

如果您使用a来支持它们PagingAndSortingRepository,您可以获取a Book,按照authors书上的链接进行PUT,并使用要关联的作者的URI.你不能走另一条路.

如果您对作者执行GET并在其books链接上执行PUT …

java spring-data spring-data-jpa spring-data-rest spring-boot

27
推荐指数
2
解决办法
1万
查看次数

Spring Data REST的QueryDSL集成可用于执行更复杂的查询吗?

我目前正在构建一个REST API,我希望客户端可以轻松地过滤特定实体的大多数属性.使用QueryDSL与结合春季数据REST(由奥利弗·基尔克一个例子),让我很容易地通过允许客户通过组合是指性质(如查询参数进行过滤得到我想要的东西90% /users?firstName=Dennis&lastName=Laumen).

我甚至可以通过实现QuerydslBinderCustomizer接口来自定义查询参数和实体属性之间的映射(例如,用于不区分大小写的搜索或部分字符串匹配).这一切都很棒,但我也希望客户能够使用范围过滤某些类型.例如关于像出生日期这样的财产,我想做类似下面的事情,/users?dateOfBirthFrom=1981-1-1&dateOfBirthTo=1981-12-31.基于数字的属性也是如此/users?idFrom=100&idTo=200.我觉得这应该可以使用QuerydslBinderCustomizer界面,但这两个库之间的集成没有得到非常广泛的记录.

总结一下,这可能使用Spring Data REST和QueryDSL吗?如果是这样,怎么样?

spring querydsl spring-data spring-data-jpa spring-data-rest

27
推荐指数
3
解决办法
8883
查看次数

JSON解析错误:无法构造java.time.LocalDate的实例:no String-argument构造函数/工厂方法从String值反序列化

我是Spring Data REST项目的新手,我正在尝试创建我的第一个RESTful服务.任务很简单,但我被困住了.

我想使用RESTful API对存储在嵌入式数据库中的用户数据执行CRUD操作.

但我无法弄清楚如何使Spring框架处理birthData为"1999-12-15"并将其存储为LocalDate.@JsonFormat注释没有帮助.

目前我收到错误:

HTTP/1.1 400 
Content-Type: application/hal+json;charset=UTF-8
Transfer-Encoding: chunked
Date: Thu, 24 Aug 2017 13:36:51 GMT
Connection: close

{"cause":{"cause":null,"message":"Can not construct instance of java.time.LocalDate: 
no String-argument constructor/factory method to deserialize from String value ('1999-10-10')\n 
at [Source: org.apache.catalina.connector.CoyoteInputStream@4ee2a60e; 
line: 1, column: 65] (through reference chain: ru.zavanton.entities.User[\"birthDate\"])"},
"message":"JSON parse error: Can not construct instance of java.time.LocalDate: 
no String-argument constructor/factory method to deserialize from String value ('1999-10-10'); nested exception is com.fasterxml.jackson.databind.JsonMappingException: 
Can not construct instance of java.time.LocalDate: no String-argument …
Run Code Online (Sandbox Code Playgroud)

rest json jackson spring-data-rest spring-boot

27
推荐指数
6
解决办法
5万
查看次数