У меня есть пользовательский сериализатор Джексона:
@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, она просто работает.