我想将状态与所有对特定实体更改感兴趣的客户端同步.所以我想实现以下目标:
HTTP/REST和websockets)websockets主题从技术上讲,我对将spring-data-rest与spring websockets实现混合以实现类似spring-data-websocket的想法感兴趣.
我想到了两种解决方案,实际上两者都是:
REST/HTTP APIwebsocket 控制器(用于对实体的修改调用) 该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 APIREST/HTTP API针对所有操作的websocket消息也会出现从技术上讲,可以通过以下方式实现:
websocket从控制器弹簧其余数据的事件(即在AfterCreateEvent,AfterSaveEvent,AfterLinkSaveEvent,AfterDeleteEvent)仍然解决方案对我来说似乎很难过,因为我需要去:
是否有可能在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
在我有限的经验中,我一再被告知你不应该将实体传递到前端或通过休息,而是使用DTO.
Spring Data Rest不是这样做的吗?我简要介绍了一些预测,但这些似乎只是限制了返回的数据,并且仍然期望一个实体作为post方法的参数来保存到数据库中.我在这里错过了什么,或者我(和我的同事)是不正确的,因为你不应该传递和实体?
rest spring domain-driven-design spring-data spring-data-rest
我一直在使用带有spring-data的RESTful web服务.几天前,发布了一个特殊的spring-data jpa REST框架.
现在我注意到在这个框架中使用@Version的能力.此版本是由自己生成还是您需要手动执行此操作?
它可以自己使用@Version吗?(这样我就不必将任何内容更改为现有的存储库/域等...)
我是否需要做一些额外的配置才能使用@Version?
我想知道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或第三方库中是否有任何内容可以解析这些链接并嵌入生成的数据?
有什么输入吗?
提前致谢!
我正在使用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)
我应该提供什么类来成功反序列化我的实体页面?
我正在实现一个基于Spring Data REST的应用程序,我想知道是否有一种优雅的方法来使用此框架或相关框架实现身份验证和授权规则.
对REST服务器的所有HTTP请求都必须带有身份验证标头,我需要检查它们并决定是否根据HTTP方法以及经过身份验证的用户与所请求资源的关联进行授权.例如,(应用程序是电子学习系统的REST服务器),教师只能访问自己的课程部分,学生只能访问他们订阅的课程部分等.
我想知道是否有一种默认方式在Spring Data REST中实现授权.如果答案是否定的,你能否就我的问题提出建议?我在考虑:
spring authorization spring-mvc spring-security spring-data-rest
使用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
我目前正在构建一个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
我是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) spring-data-rest ×10
spring-data ×6
spring ×5
java ×4
rest ×4
spring-boot ×3
hibernate ×2
spring-mvc ×2
angularjs ×1
hateoas ×1
jackson ×1
json ×1
querydsl ×1
websocket ×1