Spring boot 数据rest findby traverson to java object

Posted

技术标签:

【中文标题】Spring boot 数据rest findby traverson to java object【英文标题】:Spring boot data rest findby traverson to java object 【发布时间】:2015-04-06 23:07:29 【问题描述】:

我的 URI 是 http://localhost:8080/context/my-objects/search/findByCode?code=foo

JSON 响应:


  "_embedded" : 
    "my-objects" : [ 
      "code" : "foo",
      "description" : "foo description",
      "_links" : 
        "self" : 
          "href" : "http://localhost:8080/context/my-objects/34"
        
      
     ]
  

如何获得带有 Traverson 或 RestTemplate 的 java MyObject?

import org.springframework.hateoas.ResourceSupport;

public class MyObject extends ResourceSupport

    private String code;

    private String description;

    public String getDescription() 
        return description;
    

    public void setDescription(final String description) 
        this.description = description;
    

    public String getCode() 
        return code;
    

    public void setCode(final String code) 
        this.code = code;
    


这是我的模板。我也尝试过使用默认的。


ObjectMapper mapper = new ObjectMapper();
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
mapper.registerModule(new Jackson2HalModule());

MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
converter.setSupportedMediaTypes(MediaType.parseMediaTypes("application/hal+json"));
converter.setObjectMapper(mapper);

RestTemplate template = new RestTemplate(Collections.<HttpMessageConverter<?>> singletonList(converter));


提前致谢。

【问题讨论】:

【参考方案1】:

我找到了解决方案。首先,创建一个 Resources 类:

import org.springframework.hateoas.Resources;

public class MyObjects extends Resources<MyObject>  

那么就直截了当:

MyObjects myObjects = template.getForObject("http://localhost:8080/context/my-objects/search/findByCode?code=foo", MyObjects.class);

注意:模板应支持hal+json媒体类型。

或与特拉弗森:

import org.springframework.hateoas.MediaTypes;
import org.springframework.hateoas.client.Traverson;

Traverson traverson;
try
    traverson = new Traverson(new URI("http://localhost:8080/context"), MediaTypes.HAL_JSON);
    Map<String, Object> parameters = new HashMap<String, Object>();
    parameters.put("code", "foo");

    MyObjects myObjects = traverson.follow("my-objects", "search", "findByCode").withTemplateParameters(
                parameters).toObject(MyObjects.class);
 catch (URISyntaxException e) 

如果您不想使用 ResourceSupport 类扩展 POJO MyObject,则应使用 Resource 键入 Resources 类:

import org.springframework.hateoas.Resource;
import org.springframework.hateoas.Resources;

public class MyObjects extends Resources<Resource<MyObject>>  

(如果您不需要链接,类型参数可能又是 MyObject)。

【讨论】:

以上是关于Spring boot 数据rest findby traverson to java object的主要内容,如果未能解决你的问题,请参考以下文章

Spring数据JPA中findBy和findOneBy的区别

如何在 Spring Boot Restful 中更改大量数据(更新多个数据)

spring数据 - Mongodb - findBy嵌套对象的方法

Spring Boot - 模拟对外部 API 的 POST REST 请求

spring boot 2 全局统一返回RESTful风格数据统一异常处理

Spring Boot 2 Rest Api Example