Rest Custom HTTP конвертер сообщений Spring Boot 1.2.3

Я хочу создать пользовательский HttpMessageConverter, используя Rest, Json, Spring Boot 1.2.3 и Spring 4, однако мой пользовательский HTTPMessageConverter никогда не вызывался.

Я выполнил следующие шаги:

1: Создан класс, который расширяет AbstractHttpMessageConverter

@Component
public class ProductConverter extends AbstractHttpMessageConverter<Employee>   {

public ProductConverter() {
     super(new MediaType("application", "json", Charset.forName("UTF-8")));     
     System.out.println("Created ");
}

@Override
protected boolean supports(Class<?> clazz) {
    return false;
}

@Override
protected Employee readInternal(Class<? extends Employee> clazz,
        HttpInputMessage inputMessage) throws IOException,
        HttpMessageNotReadableException {
    InputStream inputStream =  inputMessage.getBody();
    System.out.println("Test******");
    return null;
}

@Override
protected void writeInternal(Employee t,
        HttpOutputMessage outputMessage) throws IOException,
        HttpMessageNotWritableException {
    // TODO Auto-generated method stu   
}

}

2: я создаю класс конфигурации для регистрации HTTPMessageConverters

@Configuration
public class WebMvcConfig extends WebMvcConfigurerAdapter{  
   @Override
   public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
     System.out.println("Configure Message Converters");
     converters.add(new ProductConverter());
     super.configureMessageConverters(converters);
     //super.extendMessageConverters(converters);
    }
 }

3: метод класса отдыха

@RequestMapping(value="/{categoryId}" ,method=RequestMethod.POST, consumes="application/json")
@PreAuthorize("permitAll")
public ResponseEntity<ProductEntity>  saveProduct(@RequestBody Employee  employee , @PathVariable Long categoryId) {

    logger.log(Level.INFO, "Category Id: {0}" , categoryId);

    ResponseEntity<ProductEntity> responseEntity =
            new ResponseEntity<ProductEntity>(HttpStatus.OK);
    return responseEntity;
}

Мой пользовательский HTTPMessageCoverter создан, но никогда не вызывается? Мне не хватает конфигурации или шага? любой вклад или совет приветствуется.


После переопределения методов класса (AbstractHttpMessageConverter) я обнаружил, что есть две аннотации для достижения полиморфизма @JsonTypeInfo и @JsonSubTypes. Для тех, кто хочет добиться полиморфизма, могут использовать эти две аннотации.

1 ответ

Решение

Я полагаю, что вы хотите настроить эти конвертеры сообщений, используя метод configureMessageConverters в классе конфигурации, который расширяет WebMvcConfigurerAdapter. Я сделал это сам с помощью конвертера для CSV-контента. Я включил этот код ниже. Эта ссылка также показывает пример. Эта ссылка также может быть полезной. Кажется, что с конфигурацией Spring не всегда ясно, какое место лучше всего настроить.:) Позвольте мне знать, если это помогает.

@Configuration
public class ApplicationWebConfiguration extends WebMvcConfigurerAdapter {
     @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        super.configureMessageConverters(converters);
        converters.add(new CsvMessageConverter());
    }
}

Вам также потребуется изменить верхний метод support (), чтобы он возвращал true для классов, поддерживаемых конвертером. См. Документ Spring для AbstractHttpMessageConverter поддерживает метод.

Другие вопросы по тегам