后端,Spring启动项目( v1.3.0.RELEASE ),将Rest JSON Api提供给fron-end,刚刚遇到错误:
@Bean
public HttpMessageConverter httpMessageConverter() {
FastJsonHttpMessageConverter fastJsonHttpMessageConverter = new FastJsonHttpMessageConverter();
return fastJsonHttpMessageConverter;
}
我决定更改为自定义FastJsonHttpMessageConverter,代码位于
之下HttpMessageConverter
但它不起作用,实际上它使用默认的suppliers: [
{
$ref: "$.value"
}
]
。虽然没有上述错误,但输出并不像我预期的那样。 e.g。
@Bean
public HttpMessageConverter mappingJackson2HttpMessageConverter() {
FastJsonHttpMessageConverter fastJsonHttpMessageConverter = new FastJsonHttpMessageConverter();
return fastJsonHttpMessageConverter;
}
现在更改上面的代码
mappingJackson2HttpMessageConverter
这次它有效,我想知道为什么方法名称必须是SELECT t1.ID1, t1.ID2, t1.Name1, t1.Name2, t1.date
FROM tblSomething t1
INNER JOIN
(
SELECT ID1, ID2, MAX(date) AS date
FROM tblSomething
GROUP BY ID1, ID2
) t2
ON t1.ID1 = t2.ID1 AND t1.ID2 = t2.ID2 AND t1.date = t2.date
?如果使用其他方法名称如何配置它?
答案 0 :(得分:4)
看到这个offical document后,我知道如何自定义转换器。
@Bean
public HttpMessageConverters customConverters() {
HttpMessageConverter<?> additional = new FastJsonHttpMessageConverter();
return new HttpMessageConverters(additional);
}
修改我的主要帖子,实际上在代码下面不起作用。
@Bean
public HttpMessageConverter mappingJackson2HttpMessageConverter() {
FastJsonHttpMessageConverter fastJsonHttpMessageConverter = new FastJsonHttpMessageConverter();
return fastJsonHttpMessageConverter;
}
如果在其中设置断点,则Spring boot永远不会进入此方法。
以下代码也有效。
@SpringBootApplication
public class FooApplication extends WebMvcConfigurerAdapter {
public static void main(String[] args) {
SpringApplication.run(FooApplication.class, args);
}
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
super.configureMessageConverters(converters);
converters.add(new FastJsonHttpMessageConverter());
}
}
答案 1 :(得分:2)
Spring boot说(https://docs.spring.io/spring-boot/docs/current/reference/html/howto-spring-mvc.html#howto-customize-the-responsebody-rendering):
如果你添加的bean是默认包含的类型(比如MappingJackson2HttpMessageConverter用于JSON转换),那么它将替换默认值。
您要添加的bean的类型不同,因此上述情况不会发生。您的转换器位于转换器列表中的某个位置(可能是结束位置),第一个合适的转换器(旧转换器)可以完成工作。
Java配置生成的bean具有方法的名称,因此当您创建名为mappingJackson2HttpMessageConverter的第二个bean时,它会覆盖spring boot的JacksonHttpMessageConvertersConfiguration创建的bean并将其取代。
您可能更愿意覆盖整个转换器列表,而不是添加转换器bean:
与正常的MVC使用情况一样,您提供的任何WebMvcConfigurerAdapter bean也可以通过覆盖configureMessageConverters方法来提供转换器,