Spring Boot's TestRestTemplate with HATEOAS PagedResources

后端 未结 2 700
一整个雨季
一整个雨季 2021-01-13 20:55

I\'m trying to use the TestRestTemplate in my Spring Boot Application\'s Integration-Test, to make a request to a Spring Data REST Repository.

The response in the br

2条回答
  •  春和景丽
    2021-01-13 21:35

    I did a similar test, but I'm not using spring-boot. Probably is the configuration of your RestTemplate. By the way, have you tried to use the Traverson implementation rather than RestTemplate? It's seems more simple to work with HATEOAS. See bellow my test class with both approaches.

    package org.wisecoding.api;
    
    import org.junit.Test;
    
    import org.wisecoding.api.domain.User;
    import com.fasterxml.jackson.databind.DeserializationFeature;
    import com.fasterxml.jackson.databind.ObjectMapper;
    
    import org.springframework.core.ParameterizedTypeReference;
    import org.springframework.hateoas.MediaTypes;
    import org.springframework.hateoas.PagedResources;
    import org.springframework.hateoas.client.Traverson;
    import org.springframework.hateoas.hal.Jackson2HalModule;
    import org.springframework.http.HttpMethod;
    import org.springframework.http.MediaType;
    import org.springframework.http.ResponseEntity;
    import org.springframework.http.converter.HttpMessageConverter;
    import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
    import org.springframework.web.client.RestTemplate;
    
    import java.net.URI;
    import java.util.ArrayList;
    import java.util.List;
    
    import static org.springframework.hateoas.client.Hop.rel;
    
    public class UserApiTest {
    
    
        @Test
        public void testGetUsersRestTemplate() {
            final ObjectMapper mapper = new ObjectMapper();
            mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
            mapper.registerModule(new Jackson2HalModule());
    
            final MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
            converter.setSupportedMediaTypes(MediaType.parseMediaTypes(MediaTypes.HAL_JSON_VALUE));
            converter.setObjectMapper(mapper);
    
            final List> list = new ArrayList>();
            list.add(converter);
            final RestTemplate restTemplate = new RestTemplate(list);
    
            final String authorsUrl = "http://localhost:8080/apiv1/users";
    
            final ResponseEntity> responseEntity = restTemplate.exchange(authorsUrl, HttpMethod.GET, null, new ParameterizedTypeReference>() {});
            final PagedResources resources = responseEntity.getBody();
            final List users = new ArrayList(resources.getContent());
        }
    
    
        @Test
        public void testGetUsersTraverson() throws Exception {
            final Traverson traverson = new Traverson(new URI("http://localhost:8080/apiv1"), MediaTypes.HAL_JSON);
            final ParameterizedTypeReference> resourceParameterizedTypeReference = new ParameterizedTypeReference>() {};
            final PagedResources resources = traverson.follow(rel("users")).toObject(resourceParameterizedTypeReference);
            final List users = new ArrayList(resources.getContent());
        }
    }
    

    And also, the pom.xml in case your dependencies does not match:

    
    
    
        4.0.0
        war
        org.wisecoding
        0.1-SNAPSHOT
        user-demo-data-rest
    
    
        
            4.2.6.RELEASE
            1.7.1
            UTF-8
        
    
    
        
            
                
                    org.apache.maven.plugins
                    maven-resources-plugin
                    
                        UTF-8
                    
                
                
                    org.eclipse.jetty
                    jetty-maven-plugin
                    9.0.4.v20130625
                
            
        
    
    
        
    
            
                com.jayway.jsonpath
                json-path
                2.2.0
                test
            
    
            
                com.fasterxml.jackson.datatype
                jackson-datatype-json-org
                2.7.5
            
    
            
                com.fasterxml.jackson.core
                jackson-databind
                2.6.7
            
    
            
                org.springframework.data
                spring-data-rest-webmvc
                2.5.6.RELEASE
                
                    
                        org.aspectj
                        aspectjrt
                    
                
            
    
            
                org.springframework.data
                spring-data-jpa
                1.10.1.RELEASE
            
    
            
                org.springframework
                spring-context
                ${spring.version}
            
    
            
                org.springframework
                spring-web
                ${spring.version}
            
    
            
                org.springframework
                spring-webmvc
                ${spring.version}
            
    
            
                org.springframework
                spring-test
                ${spring.version}
                test
            
    
            
                javax.servlet
                javax.servlet-api
                3.1.0
            
    
    
            
                org.slf4j
                slf4j-api
                ${slf4j.version}
            
    
            
                ch.qos.logback
                logback-classic
                1.0.13
                runtime
            
    
            
                junit
                junit
                4.11
                test
            
    
    
            
                org.hibernate
                hibernate-entitymanager
                4.2.3.Final
            
            
                org.springframework
                spring-jdbc
                ${spring.version}
            
    
            
                hsqldb
                hsqldb
                1.8.0.10
            
    
        
    
    
        
            
                central
                http://central.maven.org/maven2/
                
                    false
                
            
        
    
    
    

提交回复
热议问题