我正在使用spring mvc和hateoas构建一个restful api。之前,我将spring boot与hateoas一起使用,服务器按照我的预期呈现响应。现在,我没有使用spring boot,服务器无法正确呈现响应。从我的研究中,我发现一些人在谈论一种涉及消息转换器配置的解决方案。那么,除了注释@EnableHypermediaSupport,在没有spring boot的情况下设置媒体类型HAL还需要什么?
ApiConfiguration.java:
@Configuration
@ComponentScan
@EnableWebMvc
@EnableHypermediaSupport(type = { HypermediaType.HAL })
public class ApiConfiguration {
}
初始化器。爪哇:
public class ApiInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
return null;
}
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class[] { ApiConfiguration.class };
}
@Override
protected String[] getServletMappings() {
return new String[] { "/" };
}
}
波姆。xml:
...
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-framework-bom</artifactId>
<version>4.2.0.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.hateoas</groupId>
<artifactId>spring-hateoas</artifactId>
<version>0.19.0.RELEASE</version>
</dependency>
...
自适应控制器。爪哇:
@RestController
@ExposesResourceFor(Adaptation.class)
@RequestMapping(value = "/adaptations")
public class AdaptationRestController {
...
@RequestMapping(value = "/{id}", method = RequestMethod.GET, produces = "application/vnd.xpto-adaptation+json")
public ResponseEntity<AdaptationResource> getAdaptation(@PathVariable("id") String adaptationId) {
Adaptation adaptation = adaptationGateway.getAdaptation(adaptationId);
AdaptationResource adaptationResource = adaptationResourceAssembler.toResource(adaptation);
return new ResponseEntity<AdaptationResource>(adaptationResource, HttpStatus.OK);
}
}
适应资源。爪哇:
public class AdaptationResource extends Resource<Adaptation> {
public AdaptationResource(Adaptation adaptation) {
super(adaptation);
}
}
我得到的是:
"links": [
{
"rel": "self",
"href": "http://xpto.com"
}
],
...
应该是什么:
"_links": {
"self": {"href": "http://xpto.com"}
},
...
基本上,我使用EntityLinks
构建链接,而不从任何依赖框架的类扩展Pojo。
@RestController
@ExposesResourceFor(ProjectServiceResponse.class)
public class ProjectController {
@Autowired
private org.springframework.hateoas.EntityLinks entityLinks;
public HttpEntity<Resource<ProjectServiceResponse>> get(...){
Resource resource = new Resource<ProjectServiceResponse>(response);
resource.add(entityLinks.linkToCollectionResource(ProjectServiceResponse.class).withSelfRel());
return new ResponseEntity<Resource<ProjectServiceResponse>>(resource, HttpStatus.OK);
}
}
回应:
"_links": {
"self": {
"href": "http://localhost:8080/project"
}
在我上面的代码ProjectServiceResponse中。课程是POJO。
您可以在github上参考完整的项目
一个选择是让你的模型扩展org.springframework.hateoas.资源支持
public class MyModelClass extends ResourceSupport
然后呢
@RequestMapping(value="/myresource", method=RequestMethod.GET)
public ResponseEntity<Iterable<MyModelClass>> getAll() {
Iterable<MyModelClass> all= repository.findAll();
for(MyModelClass p : all) {
p.add(linkTo(methodOn(MyController.class).getAll()).slash(p.getId()).withSelfRel());
}
return new ResponseEntity<>(all, HttpStatus.OK);
}
如果您使用Spring Data JPA进行数据访问,您可以通过添加EnableSpringDataWebSupport
声明性地启用其Web支持。这将为Controller
方法注册一堆ArgumentResolvers
。简而言之,您可以向方法添加PagedResourcesAssembler
参数,并使用其toResources
方法将Page
ed实体转换为资源,如下所示:
@RequestMapping(method = GET)
public ResponseEntity getAll(PagedResourcesAssembler ass) {
Page<User> users = userRepository.findAll(new PageRequest(0, 10));
PagedResources pagedResources = ass.toResource(users, assembler);
return ok(pagedResources);
}
通过这个json输出:
{"_embedded":{...},"_links":{"self":{"href":"http://localhost:8080/users"}},"page":{...}}
问题内容: 我正在使用此布局。很大程度上取决于CSS calc进行必要的计算。 现在,我无法在Safari中使用它。我做错了什么吗? 而且,是否有一种方法可以为不支持该功能的浏览器引入后备机制?百分比不会做得很好,因为我必须从侧面的两个中减去中间的对象。 谢谢。 问题答案: 我解决此问题的方法是引入纯CSS后备功能,即不支持CSS calc的旧版浏览器只能读取。 如果浏览器无法读取计算值,则左右面
蓝牙配网 参数说明 字段 类型 必须? 说明 wifi RKWiFi 是 蓝牙发送Wifi信息 示例代码 Swift: // 获取 手机当前连接的 WIFI var wifi: RKWiFi = RKWiFi.current() RokidMobileSDK.binder?.sendWiFi(device: device, wifi: wifi, password:"123456") Objc:
设备配网 接口说明 发送绑定数据 这里会发送到正在连接的蓝牙设备 参数说明 字段 类型 必须? 说明 binderData DeviceBinderData 是 蓝牙发送信息 举个大栗子 // 构建绑定数据 DeviceBinderData binderData = DeviceBinderData.newBuilder() .wifiPwd("your wif
我只是想学习,构建一个Spring HATEOAS应用程序。 我已将自定义查询添加到我的存储库中: 我得到了很好的JSON响应,但由于这是可分页的,我想要一个链接部分。。。使用上一个/下一个。 我该如何添加它? 主url提供了所有客户的列表,链接没有问题,我只想将这些链接添加到自定义可分页方法。 --编辑-- 啊! 使findAllFitered方法返回一个页面而不是列表。。。
主要内容:参考地点,转换后备缓冲器(TLB)寻呼的缺点 页表的大小可能非常大,因此浪费了主存。 CPU将花费更多时间从主存储器中读取单个字。 如何减少页面大小 页面大小可以通过增加页面大小来减小,但会导致内部碎片,并且也会导致页面浪费。 其他方式是使用多级分页,但增加了有效访问时间,因此这不是一个实际的方法。 如何减少有效的访问时间 CPU可以使用一个寄存器,里面存储页表,这样访问页表的访问时间可以变得非常少,但是寄存器并不便宜,并且与页表
“后端”只是一个,mdbook在书籍渲染过程中调用的程序。该程序会拿到传递到stdin的书籍和配置信息的 JSON 表达式。一旦后端收到这些信息,就可以自由地做任何想做的事情. GitHub 上已有几个备用后端,可以作为你实践,如何实现这一功能的粗略示例. mdbook-linkcheck- 用于验证书籍的简单程序,不包含任何损坏的链接 mdbook-epub- EPUB 渲染器 mdbook-t