3

我想使用 Rest、Json、Spring Boot 1.2.3 和 Spring 4 创建一个自定义的 HttpMessageConverter,但是我的自定义 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。对于任何想要实现多态性的人都可以使用这两个注释。

4

1 回答 1

3

我相信您想在扩展 WebMvcConfigurerAdapter 的配置类中使用 configureMessageConverters 方法配置这些消息转换器。我自己使用 CSV 内容的转换器完成了这项工作。我在下面包含了该代码。此链接也显示了一个示例。 此链接也可能会有所帮助。似乎对于 Spring 配置,配置事物的最佳位置并不总是很清楚。:) 让我知道这是否有帮助。

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

您还需要修改您的supports() 方法以对转换器支持的类返回true。请参阅Spring 文档以了解 AbstractHttpMessageConverter 支持方法

于 2015-06-10T14:45:52.707 回答