Модульный тест клиента Джерси

Я настроил ресурс Джерси, который отлично возвращает список в браузере. Но я не могу заставить его работать в моем модульном тесте. Я получаю сообщение об ошибке:

A message body writer for Java class java.util.ArrayList, and Java type java.util.List<at.sunfinder.dto.Location>, and MIME media type application/json was not found

Я добавляю свои классы в следующем

Ресурс:

@GET
    @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
    public List<Location> getWeather(@QueryParam("latitude") double latitude, @QueryParam("longitude") double longitude,
            @QueryParam("radius") int radius, @QueryParam("countryCode") String countryCode /* Datum */) {

        setWeatherController(new WeatherControllerImpl());      
        return weatherController.getWeather(latitude, longitude, radius, countryCode);
    }

Расположение DTO:

@XmlRootElement
public class Location {

    private String location;
    private double latitude;
    private double longitude;
    private Weather weather;

    @XmlTransient
    private Date lastUpdate;

    public Location(){}

    public Location(double latitude, double longitude, String location, Weather weather, Date lastUpdate){
        this.latitude = latitude;
        this.longitude = longitude;
        this.location = location;
        this.weather = weather;
        this.lastUpdate = lastUpdate;
    }

    @XmlElement(name="location")
    public String getLocation() {
        return location;
    }

    @XmlElement(name="latitude")
    public double getLatitude() {
        return latitude;
    }

    @XmlElement(name="longitude")
    public double getLongitude() {
        return longitude;
    }

    @XmlElement(name="weather")
    public Weather getWeather(){
        return weather;
    }   
}

И мой модульный тест:

@Test
    public void testGetWeather(){       

        Client client = Client.create();         


        WebResource webResource = client.resource(url); 
        ClientResponse response = webResource.accept("application/json").get(ClientResponse.class);

        List<Location> locations = null;

        if(response.getClientResponseStatus() == ClientResponse.Status.OK){
            locations = response.getEntity(new GenericType<List<Location>>(){});
        }

        assertTrue(locations.size()> 0);
    }

Мой pom xml имеет следующие зависимости: com.sun.jersey jersey-server 1.18.1

        <dependency>
            <groupId>com.sun.jersey</groupId>
            <artifactId>jersey-servlet</artifactId>
            <version>1.18.1</version>
        </dependency>

        <dependency>
            <groupId>com.sun.jersey</groupId>
            <artifactId>jersey-client</artifactId>
            <version>1.18.1</version>
        </dependency>

person krackmoe    schedule 23.03.2014    source источник


Ответы (1)


Похоже, ваш тест запрашивает формат application/json, но ваш DTO Location не может его проанализировать. Попробуйте изменить тест, чтобы запросить application/xml, т. е.:

ClientResponse response = webResource.accept("application/xml").get(ClientResponse.class);

В качестве альтернативы убедитесь, что ваш DTO также может анализировать json (предоставив аннотации @JsonProperty).

person Johan Rydström    schedule 26.03.2014