为什么我们需要在Spring中指定HttpMessageConverter?

时间:2017-10-05 07:42:14

标签: java json spring spring-mvc

现在我正在使用Spring MVC并且我发现控制器的某些方法没有返回数据并抛出HttpMediaTypeNotAcceptableException而我的方法正在生成text/plain。我在配置中发现有人覆盖configureMessageConverters(List<HttpMessageConverter<?>> converters)

WebMvcConfigurerAdapter
@Autowired
private MappingJackson2HttpMessageConverter jsonConverter;

@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
    converters.addAll(Collections.singletonList(jsonConverter));
}

我读了一些文章并发现: 默认情况下,以下HttpMessageConverters实例已预先启用:

  

ByteArrayHttpMessageConverter - 转换字节数组
  StringHttpMessageConverter - 转换字符串
  ResourceHttpMessageConverter - 转换   org.springframework.core.io.Resource用于任何类型的八位字节流
  SourceHttpMessageConverter - 转换javax.xml.transform.Source   FormHttpMessageConverter - 将表单数据转换为/从   MultiValueMap。
  Jaxb2RootElementHttpMessageConverter -   将Java对象转换为XML或从XML转换(仅当存在JAXB2时才添加)   classpath)
  MappingJackson2HttpMessageConverter - 转换JSON   (仅在杰克逊2出现在班级路径时才添加)
  MappingJacksonHttpMessageConverter - 转换JSON(仅在   杰克逊出现在班级路径上)   AtomFeedHttpMessageConverter -   转换Atom提要(仅当类路径中存在罗马时才添加)
  RssChannelHttpMessageConverter - 转换RSS提要(仅在添加时添加)   罗马出现在类路径上)

我删除了该代码,一切正常。所以任何人都知道为什么要这样做,我的意思是为什么代码是写的?因为我看到一切都是开箱即用的,而且代码没用。 所以问题是:

  

为什么我们需要在Spring中指定HttpMessageConverter?

1 个答案:

答案 0 :(得分:4)

<header> <h1> <div id="containertop">header</div> </h1> </header> <div id="parent"> <div id="containercircle" float="right"> <div id="circle" onclick="ShowPicture(this,'1')">Test</div> </div> <div id="containerimg"> <img id="pic0" class="crop" src="boor.jpg" style="display:none;" /> <img id="pic1" class="crop" src="boor.jpg" style="display:none;" /> <img id="pic2" class="crop" src="boor.jpg" style="display:none;" /> <img id="pic3" class="crop" src="boor.jpg" style="display:none;" /> </div> </div>已添加到MappingJackson2HttpMessageConverter中,但该版本可能尚未自动发现。

代码可能是为旧版本编写的,随着库的升级而变得过时。它也可能是由一个不知道它是自动更新版本的人编写的(如果你从网上随机复制粘贴代码,你真的不知道你结束了什么样的怪物创造)。

除非您已经执行了默认情况下尚未配置的特定内容,否则您不需要配置其他转换器。如果你不做任何异国情调,那么这些日子应该是非常罕见的。

我的问题是,如果您手动配置它,为什么它不起作用。这是不必要的,但这并不意味着它不被允许。它不应该破坏。