Spring MVC + тест @JsonSerializer = ошибка 406 - PullRequest
0 голосов
/ 25 января 2019

У меня есть пользовательский сериализатор Джексона:

@JacksonStdImpl
public class ToResourceProtectedSerializer extends JsonSerializer<String> {
    private final ExecutionContext executionContext;

    public ToResourceProtectedSerializer(ExecutionContext executionContext) {
        this.executionContext = executionContext;
    }

    @Override
    public void serialize(final String value, final JsonGenerator gen, final SerializerProvider provider) throws IOException {
        // logic using executionContext
    }
}

используется в классе заказа:

public class Order {

    @JsonSerialize(using = ToResourceProtectedSerializer.class)
    private final String id;
    // getter, setter, constructors and stuff
}

Я пытаюсь проверить этот метод контроллера:

@GetMapping(value = "orders/{id}", produces = MediaType.APPLICATION_JSON_VALUE)
public Order updateOrderAppointment(@PathVariable("id") final String orderId) {
    // create and return new Order with given id
}

с использованием MockMvc:

@Test
public void test() {
    this.mockMvc = MockMvcBuilders.standaloneSetup(appointmentsController)                .build();
    mockMvc.perform(get("/orders/id")
            .contentType("application/json")
            .accept("application/json"))
            .andExpect(status().isOk());
}

но по какой-то причине я всегда получаю 406. Исключение выдается при сериализации ответа контроллера, фактически я получаю:

org.springframework.web.HttpMediaTypeNotAcceptableException: Could not find acceptable representation

Вот мой файл конфигурации xml:

  <mvc:annotation-driven>
<mvc:message-converters>
  <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
    <property name="objectMapper">
      <bean class="com.fasterxml.jackson.databind.ObjectMapper">
        <property name="serializationInclusion" value="NON_NULL"/>
      </bean>
    </property>
  </bean>
</mvc:message-converters>
</mvc:annotation-driven>

Другое дело: если я удаляю аннотацию из класса Order, она просто работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...