У меня есть общий класс, который используется в качестве ответа всеми ресурсами моего 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
JerseyTest — readEntity с универсальным типом ⇐ JAVA
Программисты JAVA общаются здесь
-
Anonymous
1731258383
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?
Полный код
[b]зависимости pom.xml[/b]
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
[b]Класс JerseyTest[/b]
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());
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79175344/jerseytest-readentity-with-generic-type[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия