JerseyTest — readEntity с универсальным типомJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 JerseyTest — readEntity с универсальным типом

Сообщение Anonymous »

У меня есть общий класс, который используется в качестве ответа всеми ресурсами моего API
public class TestResponse {
private boolean result;
private int status;
private T data;
// Getters and Setters
}

У меня есть еще два класса, которые используются для создания экземпляра поля TestResponse.Data из двух разных ресурсов
public class TestResponseData01 {
private int id;
// Getters and Setters
}

public class TestResponseData02 {
private String message;
// Getters and Setters
}

один ресурс, который возвращает ответ типа TestResponse, а другой TestResponse
В тестовый класс, я создал метод, который запускает общие тесты ответов всех ресурсов, но я хотел бы вернуть экземпляр TestResponse, чтобы затем можно было запускать конкретные тесты на основе тестируемого ресурса.
private TestResponse commonTest(Response response, Class dataType) {
TestResponse testResponse = response.readEntity(new GenericType(){});
// ...
}

Проблема в том, что оператор TestResponse testResponse = response.readEntity(new GenericType(){}) десериализует ответ JSON, но для поле TestResponse.Data создает экземпляр объекта типа java.util.LinkedHashMap
Как выполнить метод readEntity, чтобы TestResponse.Data поле правильно создан экземпляр с помощью TestResponseData01 или TestResponseData02?
Полный код
зависимости pom.xml

UTF-8
1.18.30
2.25.1
5.11.2




org.projectlombok
lombok
${lombok.version}
provided



org.glassfish.jersey.containers
jersey-container-servlet
${jersey.version}


org.glassfish.jersey.media
jersey-media-json-jackson
${jersey.version}


org.glassfish.jersey.ext
jersey-bean-validation
${jersey.version}



org.junit.jupiter
junit-jupiter-api
${junit.version}
test



org.glassfish.jersey.test-framework
jersey-test-framework-core
${jersey.version}
test


org.glassfish.jersey.test-framework.providers
jersey-test-framework-provider-grizzly2
${jersey.version}
test



Класс JerseyTest
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Application;
import javax.ws.rs.core.GenericType;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;

import org.glassfish.jersey.server.ResourceConfig;
import org.glassfish.jersey.test.JerseyTest;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestInstance;
import org.junit.jupiter.api.TestInstance.Lifecycle;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.ToString;

@TestInstance(Lifecycle.PER_CLASS)
public class Test_GenericType extends JerseyTest {
@NoArgsConstructor
@AllArgsConstructor
@Getter
@ToString
public static class TestResponse {
private boolean result;
private int status;
private T data;
}

@NoArgsConstructor
@AllArgsConstructor
@Getter
@ToString
public static class TestResponseData01 {
private int id;
}

@NoArgsConstructor
@AllArgsConstructor
@Getter
@ToString
public static class TestResponseData02 {
private String message;
}

@Path("testData01")
@Produces(MediaType.APPLICATION_JSON)
public static class TestResponseData01Resource {
@GET
public Response test() {
TestResponseData01 testResponseData01 = new TestResponseData01(1);
TestResponse testResponse = new TestResponse(true, Response.Status.OK.getStatusCode(), testResponseData01);
return Response.status(Response.Status.OK).entity(testResponse).build();
}
}

@Path("testData02")
@Produces(MediaType.APPLICATION_JSON)
public static class TestResponseData02Resource {
@GET
public Response test() {
TestResponseData02 testResponseData02 = new TestResponseData02("a");
TestResponse testResponse = new TestResponse(true, Response.Status.OK.getStatusCode(), testResponseData02);
return Response.status(Response.Status.OK).entity(testResponse).build();
}
}

@Override
protected Application configure() {
return new ResourceConfig(TestResponseData01Resource.class, TestResponseData02Resource.class);
}

@BeforeAll
public void before() throws Exception {
super.setUp();
}

@AfterAll
public void after() throws Exception {
super.tearDown();
}

private TestResponse commonTest(Response response, Class dataType) {
TestResponse testResponse = response.readEntity(new GenericType(){});
assertTrue(testResponse.isResult());
assertEquals(200, testResponse.getStatus());
return testResponse;
}

@Test
void Test_ResponseData01Resource() {
Response response = target("testData01").request().get();
TestResponse testResponse = commonTest(response, TestResponseData01.class);
TestResponseData01 testData = testResponse.getData();
assertEquals(1, testData.getId());
}

@Test
void Test_ResponseData02Resource() {
Response response = target("testData02").request().get();
TestResponse testResponse = commonTest(response, TestResponseData02.class);
TestResponseData02 testData = testResponse.getData();
assertEquals("a", testData.getMessage());
}
}


Подробнее здесь: https://stackoverflow.com/questions/791 ... neric-type
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»