Десериализация Джексона не удалась в тесте Mockmvc, но работает нормально при запуске приложения.JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Десериализация Джексона не удалась в тесте Mockmvc, но работает нормально при запуске приложения.

Сообщение Anonymous »

У меня есть следующий контроллер:
import java.util.List;

import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import dev.monterrosa.model.Book;
import org.springframework.web.bind.annotation.PostMapping;

@RestController
@RequestMapping("/")
public class TestController {

@PostMapping("books")
public String testProperties(@RequestBody List books) {

books.stream().forEach(book -> {
System.out.println(book.getTitle());
System.out.println(book.getAuthor());
});
return "this is a test";
}

}

Я использую это свойство, чтобы разрешить использование одного элемента в теле POST/books, оно включено в application.properties и test.properties
код>:
spring.jackson.deserialization.accept-single-value-as-array=true

Работает, когда:
при обычном запуске приложения и выполнении почтового вызова с использованием этого тела:
{
"title": "Title 1",
"author": "Author 1"
}

Не удалось выполнить этот тест:
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;

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 org.mockito.MockitoAnnotations;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.http.MediaType;
import org.springframework.test.context.TestPropertySource;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;

@TestInstance(Lifecycle.PER_CLASS)
@SpringBootTest(classes = TestController.class)
@TestPropertySource(locations = "classpath:test.properties")
public class TestControllerTest {

@Autowired
TestController testController;

MockMvc mockMvc;

String requestBody;

@BeforeAll
void setUp() {

MockitoAnnotations.openMocks(this);

mockMvc = MockMvcBuilders
.standaloneSetup(testController)
.build();

requestBody = """
{
"title": "Title 1",
"author": "Author 1"
}
""";
}

@Test
void testTestProperties() throws Exception {
mockMvc.perform(post("/books").contentType(MediaType.APPLICATION_JSON).content(requestBody))
.andExpect(status().isOk());
}
}

С ошибкой:
2024-06-24T15:03:49.159-06:00 DEBUG 43943 --- [jackson-error] [ main] o.s.web.method.HandlerMethod : Could not resolve parameter [0] in public java.lang.String dev.monterrosa.jackson_error.controller.TestController.testProperties(java.util.List): JSON parse error: Cannot deserialize value of type `java.util.ArrayList` from Object value (token `JsonToken.START_OBJECT`)

Это сработало бы, если бы я обернул txt requestBody в [], как и ожидалось. Интересно, почему тест не пройден, хотя для обоих сценариев настроено одно и то же свойство .
Это мой pom.xml


4.0.0

org.springframework.boot
spring-boot-starter-parent
3.3.1


dev.monterrosa
jackson-error
0.0.1-SNAPSHOT
jackson-error
Demo project for Spring Boot


21



org.springframework.boot
spring-boot-starter-web



org.springframework.boot
spring-boot-devtools
runtime
true


org.springframework.boot
spring-boot-starter-test
test






org.springframework.boot
spring-boot-maven-plugin







Подробнее здесь: https://stackoverflow.com/questions/786 ... -running-t
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Получение 403 запрещено в тесте контроллера загрузки Spring с помощью MockMVC
    Anonymous » » в форуме JAVA
    0 Ответы
    24 Просмотры
    Последнее сообщение Anonymous
  • Десериализация XML в Micronaut 4.x не удалась, хотя те же Pojo работают нормально в Spring Boot
    Anonymous » » в форуме JAVA
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous
  • Десериализация Джексона с анонимными классами
    Anonymous » » в форуме JAVA
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous
  • Десериализация Джексона в обход конечных полей
    Anonymous » » в форуме JAVA
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous
  • Десериализация Джексона с общими аргументами
    Гость » » в форуме JAVA
    0 Ответы
    20 Просмотры
    Последнее сообщение Гость

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