在本文中,我们将带你了解java–SpringREST|MappingJacksonHttpMessageConverter生成无效的JSON在这篇文章中,我们将为您详细介绍java–SpringRE
在本文中,我们将带你了解java – Spring REST | MappingJacksonHttpMessageConverter生成无效的JSON在这篇文章中,我们将为您详细介绍java – Spring REST | MappingJacksonHttpMessageConverter生成无效的JSON的方方面面,并解答springmvc输出json常见的疑惑,同时我们还将给您一些技巧,以帮助您实现更有效的Fastjson、Jackson 与 SpringMVC 整合的 MessageConverter 配置、java – 自定义的Jackson HttpMessageConverter不再适用于Spring 4.2、java.lang.ClassNotFoundException:org.springframework.http.converter.json.MappingJackson2HttpMessageConverter、MappingJackson2HttpMessageConverter 如何处理 Decimal 小数点保留 2 位问题?。
本文目录一览:- java – Spring REST | MappingJacksonHttpMessageConverter生成无效的JSON(springmvc输出json)
- Fastjson、Jackson 与 SpringMVC 整合的 MessageConverter 配置
- java – 自定义的Jackson HttpMessageConverter不再适用于Spring 4.2
- java.lang.ClassNotFoundException:org.springframework.http.converter.json.MappingJackson2HttpMessageConverter
- MappingJackson2HttpMessageConverter 如何处理 Decimal 小数点保留 2 位问题?
java – Spring REST | MappingJacksonHttpMessageConverter生成无效的JSON(springmvc输出json)
我用Spring实现了一个RESTful Web服务.该服务基于Accept标头以XML或JSON响应.这是context.xml映射:
这是我的控制器方法:
@Controller
@RequestMapping(value = "/entityService")
class RestfulEntityService {
@Resource
private EntityService entityService;
@ResponseBody
@RequestMapping(value = "/getAllEntities",method = RequestMethod.GET)
public List
XML响应是有效的,但是,当客户端将Accept标头设置为application / json时,响应是无效的JSON.
这是JSON响应示例:
[{"id":3,"attributes":[{"id":18,"attributeValue":null,"attributeName":"mobile","attributeType":"varchar(40)","entity":{"id":3,"attributes": ..... repeats for a while and then stops..
最佳答案
您使用XStream序列化XML响应,使用Jackson JSON序列化JSON响应.查看您发布的JSON输出,似乎有一个循环引用问题.我猜测实体有一个属性列表,每个属性都指向它们各自的实体. XStream通过使用XPath透明地处理循环引用,这允许在反序列化返回到对象时保留引用.从v1.6开始,Jackson能够处理循环引用,但是你需要通过@JsonManagedReference和@JsonBackReference来注释你的序列化实体来帮助它.我认为杰克逊在允许JSON序列化中的返回引用方面是独一无二的.
请参阅handling bi-directional references using declarative methods的杰克逊文档以供参考.
Fastjson、Jackson 与 SpringMVC 整合的 MessageConverter 配置
1.Jackson
maven 依赖
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.7.1</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
<version>2.7.1</version>
</dependency>
springmvc-servlet.xml 中配置
<mvc:annotation-driven>
<mvc:message-converters>
<bean class="org.springframework.http.converter.StringHttpMessageConverter">
<constructor-arg value="UTF-8"/>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
2.FastJson
由于 FastJson 针对 Spring4.2 以后进行特殊优化,具体如图
所以 FastJson 可以分为 Spring4.2 及以下配置和 Spring4.2 以上的不同配置
2.1Spring4.2 及以下配置
maven 依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.7</version>
</dependency>
springmvc-servlet.xml 中配置
<mvc:annotation-driven>
<mvc:message-converters register-defaults="true">
<bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/html;charset=UTF-8</value>
<value>application/json</value>
<value>application/xml;charset=UTF-8</value>
</list>
</property>
<property name="features">
<list>
<value>WriteMapNullValue</value>
<value>QuoteFieldNames</value>
<value>WriteDateUseDateFormat</value>
</list>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
2.2Spring4.2 以上配置
maven 依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.7</version>
</dependency>
springmvc-servlet.xml 中配置
<mvc:annotation-driven validator="validator">
<mvc:message-converters register-defaults="true">
<ref bean="stringHttpMessageConverter"/>
<ref bean="fastJsonHttpMessageConverter"/>
</mvc:message-converters>
</mvc:annotation-driven>
<!--FastJson(spring4.2x版本以上)-->
<bean id="stringHttpMessageConverter"
class="org.springframework.http.converter.StringHttpMessageConverter">
<constructor-arg value="UTF-8" index="0"></constructor-arg>
<property name="supportedMediaTypes">
<list>
<value>text/plain;charset=UTF-8</value>
</list>
</property>
</bean>
<bean id="fastJsonHttpMessageConverter" class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter4">
<property name="supportedMediaTypes">
<list>
<value>text/html;charset=UTF-8</value>
<value>application/json;charset=UTF-8</value>
</list>
</property>
<property name="fastJsonConfig">
<bean class="com.alibaba.fastjson.support.config.FastJsonConfig">
<property name="features">
<list>
<value>AllowArbitraryCommas</value>
<value>AllowUnQuotedFieldNames</value>
<value>DisableCircularReferenceDetect</value>
</list>
</property>
<property name="dateFormat" value="yyyy-MM-dd HH:mm:ss"></property>
</bean>
</property>
</bean>
java – 自定义的Jackson HttpMessageConverter不再适用于Spring 4.2
模型
@JsonFilter("fieldFilter") public class MyModel { /*model fields and methods*/ }
模型包装
public class ResponseEnvelope { private Set<String> fieldSet; private Set<String> exclude; private Object entity; public ResponseEnvelope(Object entity) { this.entity = entity; } public ResponseEnvelope(Object entity,Set<String> fieldSet,Set<String> exclude) { this.fieldSet = fieldSet; this.exclude = exclude; this.entity = entity; } public Object getEntity() { return entity; } @JsonIgnore public Set<String> getFieldSet() { return fieldSet; } @JsonIgnore public Set<String> getExclude() { return exclude; } public void setExclude(Set<String> exclude) { this.exclude = exclude; } public void setFieldSet(Set<String> fieldSet) { this.fieldSet = fieldSet; } public void setFields(String fields) { Set<String> fieldSet = new HashSet<String>(); if (fields != null) { for (String field : fields.split(",")) { fieldSet.add(field); } } this.fieldSet = fieldSet; } }
调节器
@Controller public class MyModelController { @Autowired MyModelRepository myModelRepository; @RequestMapping(value = "/model",method = RequestMethod.GET,produces = { MediaType.APPLICATION_JSON_VALUE }) public httpentity find(@RequestParam(required=false) Set<String> fields,@RequestParam(required=false) Set<String> exclude){ List<MyModel> objects = myModelRepository.findAll(); ResponseEnvelope envelope = new ResponseEnvelope(objects,fields,exclude); return new ResponseEntity<>(envelope,HttpStatus.OK); } }
自定义HttpMessageConverter
public class FilteringJackson2HttpMessageConverter extends MappingJackson2HttpMessageConverter { private boolean prefixJson = false; @Override public void setPrefixJson(boolean prefixJson) { this.prefixJson = prefixJson; super.setPrefixJson(prefixJson); } @Override protected void writeInternal(Object object,HttpOutputMessage outputMessage) throws IOException,HttpMessageNotWritableException { ObjectMapper objectMapper = getobjectMapper(); JsonGenerator jsonGenerator = objectMapper.getFactory().createGenerator(outputMessage.getBody()); try { if (this.prefixJson) { jsonGenerator.writeraw(")]}',"); } if (object instanceof ResponseEnvelope) { ResponseEnvelope envelope = (ResponseEnvelope) object; Object entity = envelope.getEntity(); Set<String> fieldSet = envelope.getFieldSet(); Set<String> exclude = envelope.getExclude(); FilterProvider filters = null; if (fieldSet != null && !fieldSet.isEmpty()) { filters = new SimpleFilterProvider() .addFilter("fieldFilter",SimpleBeanPropertyFilter.filterOutAllExcept(fieldSet)) .setFailOnUnkNownId(false); } else if (exclude != null && !exclude.isEmpty()) { filters = new SimpleFilterProvider() .addFilter("fieldFilter",SimpleBeanPropertyFilter.serializeAllExcept(exclude)) .setFailOnUnkNownId(false); } else { filters = new SimpleFilterProvider() .addFilter("fieldFilter",SimpleBeanPropertyFilter.serializeAllExcept()) .setFailOnUnkNownId(false); } objectMapper.setFilterProvider(filters); objectMapper.writeValue(jsonGenerator,entity); } else if (object == null){ jsonGenerator.writeNull(); } else { FilterProvider filters = new SimpleFilterProvider().setFailOnUnkNownId(false); objectMapper.setFilterProvider(filters); objectMapper.writeValue(jsonGenerator,object); } } catch (JsonProcessingException e){ e.printstacktrace(); throw new HttpMessageNotWritableException("Could not write JSON: " + e.getMessage()); } } }
组态
@Configuration @EnableWebMvc public class WebServicesConfig extends WebMvcConfigurerAdapter { @Override public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { FilteringJackson2HttpMessageConverter jsonConverter = new FilteringJackson2HttpMessageConverter(); jsonConverter.setSupportedMediaTypes(MediaTypes.APPLICATION_JSON); converters.add(jsonConverter); } // Other configurations }
现在我得到这个异常(被Spring记录下来),并且在进行任何请求时有一个500错误:
[main] WARN o.s.w.s.m.s.DefaultHandlerExceptionResolver - Failed to write HTTP message: org.springframework.http.converter.HttpMessageNotWritableException: Could not write content: Can not resolve PropertyFilter with id 'fieldFilter'; no FilterProvider configured (through reference chain: org.oncoblocks.centromere.web.controller.ResponseEnvelope["entity"]->java.util.ArrayList[0]); nested exception is com.fasterxml.jackson.databind.JsonMappingException: Can not resolve PropertyFilter with id 'fieldFilter'; no FilterProvider configured (through reference chain: org.oncoblocks.centromere.web.controller.ResponseEnvelope["entity"]->java.util.ArrayList[0])
configureMessageConverters方法执行,但它看起来不像在请求期间自定义转换器被使用.另一个消息转换器可能会阻止这个消息转发到达我的响应?我的理解是,覆盖configureMessageConverters会阻止除了手动注册的转换器之外的转换器.
除了通过Spring平台更新依赖关系,这个代码的工作版本和非工作版本之间都没有改变. JSON序列化有什么变化,我刚刚在文档中丢失了吗?
编辑
进一步测试产生奇怪的结果.我想测试检查以下事情:
我的自定义HttpMessageConverter是否正在注册?
>另一个转换器是否覆盖/取代它?
>这是我的测试设置问题吗?
所以,我添加了一个额外的测试,并看看输出:
@Autowired WebApplicationContext webApplicationContext; @Before public void setup(){ mockmvc = mockmvcBuilders.webAppContextSetup(webApplicationContext).build(); } @Test public void test() throws Exception { RequestMappingHandlerAdapter adapter = (RequestMappingHandlerAdapter) webApplicationContext.getBean("requestMappingHandlerAdapter"); List<EntrezGene> genes = EntrezGene.createDummyData(); Set<String> exclude = new HashSet<>(); exclude.add("entrezGeneId"); ResponseEnvelope envelope = new ResponseEnvelope(genes,new HashSet<String>(),exclude); for (HttpMessageConverter converter: adapter.getMessageConverters()){ System.out.println(converter.getClass().getName()); if (converter.canWrite(ResponseEnvelope.class,MediaType.APPLICATION_JSON)){ MockHttpOutputMessage message = new MockHttpOutputMessage(); converter.write((Object) envelope,MediaType.APPLICATION_JSON,message); System.out.println(message.getBodyAsstring()); } } }
…它工作正常.我的信封对象及其内容被序列化并被正确过滤.因此,在到达消息转换器之前,请求处理有问题,或者mockmvc如何测试请求发生了变化.
解决方法
看看4.2.4.RELEASE的源代码
AbstractMessageConverterMethodProcessor#writeWithMessageConverters
protected <T> void writeWithMessageConverters(T returnValue,MethodParameter returnType,ServletServerHttpRequest inputMessage,ServletServerHttpResponse outputMessage) throws IOException,HttpMediaTypeNotAcceptableException,HttpMessageNotWritableException { ... ((GenericHttpMessageConverter<T>) messageConverter).write(returnValue,returnValueType,selectedMediaType,outputMessage); ... }
AbstractGenericHttpMessageConverter#写
public final void write(final T t,final Type type,MediaType contentType,HttpMessageNotWritableException { ... writeInternal(t,type,outputMessage); ... }
从AbstractGenericHttpMessageConverter#write(…)中调用的writeInternal(…)方法有三个参数 – (T t,Type type,HttpOutputMessage outputMessage).您将覆盖只有2个参数的writeInternal(…)的重载版本(T t,HttpOutputMessage outputMessage).
但是,在版本4.1.7.RELEASE中,情况并非如此,因此是您问题的根本原因.在这个版本中使用的writeInternal(…)是另一个重载的方法(有2个参数的方法),你已经被覆盖了.这解释了为什么它在4.1.7.RELEASE中正常工作.
@Override public final void write(final T t,outputMessage); ... }
所以,为了解决你的问题,而不是覆盖writeInternal(Object对象,HttpOutputMessage outputMessage),重写writeInternal(Object对象,Type类型,HttpOutputMessage outputMessage)
java.lang.ClassNotFoundException:org.springframework.http.converter.json.MappingJackson2HttpMessageConverter
我在项目中使用spring-integration。在码头容器中部署应用程序时,出现以下异常:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'integrationRequestMappingHandlerMapping': Initialization of bean failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'inboundhttpJobRequestGateway': Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [org.springframework.integration.http.inbound.HttpRequestHandlingMessagingGateway]: Constructor threw exception; nested exception is java.lang.NoClassDefFoundError: org/springframework/http/converter/json/MappingJackson2HttpMessageConverter
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:527)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:585)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:913)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:464)
at com.dsths.spring.web.DsthsContextLoaderListener.configureAndRefreshWebApplicationContext(DsthsContextLoaderListener.java:97)
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:284)
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:111)
at org.eclipse.jetty.server.handler.ContextHandler.callContextInitialized(ContextHandler.java:771)
at org.eclipse.jetty.servlet.ServletContextHandler.callContextInitialized(ServletContextHandler.java:411)
at org.eclipse.jetty.server.handler.ContextHandler.startContext(ContextHandler.java:763)
at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:247)
at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1238)
at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:706)
at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:480)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64)
at com.dsths.common.container.core.deploy.DeploymentManager.deploy(DeploymentManager.java:54)
at com.dsths.common.container.core.deploy.DeploymentManager$$FastClassByCGLIB$$f5bc43eb.invoke(<generated>)
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:698)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
at org.springframework.aop.interceptor.AsyncExecutionInterceptor$1.call(AsyncExecutionInterceptor.java:95)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:724)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'inboundhttpJobRequestGateway': Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [org.springframework.integration.http.inbound.HttpRequestHandlingMessagingGateway]: Constructor threw exception; nested exception is java.lang.NoClassDefFoundError: org/springframework/http/converter/json/MappingJackson2HttpMessageConverter
at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:288)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1035)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:939)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:485)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1093)
at org.springframework.integration.http.inbound.IntegrationRequestMappingHandlerMapping.detectHandlerMethods(IntegrationRequestMappingHandlerMapping.java:103)
at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.initHandlerMethods(AbstractHandlerMethodMapping.java:109)
at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.initApplicationContext(AbstractHandlerMethodMapping.java:89)
at org.springframework.context.support.ApplicationObjectSupport.initApplicationContext(ApplicationObjectSupport.java:119)
at org.springframework.web.context.support.WebApplicationObjectSupport.initApplicationContext(WebApplicationObjectSupport.java:72)
at org.springframework.context.support.ApplicationObjectSupport.setApplicationContext(ApplicationObjectSupport.java:73)
at org.springframework.context.support.ApplicationContextAwareProcessor.invokeAwareInterfaces(ApplicationContextAwareProcessor.java:117)
at org.springframework.context.support.ApplicationContextAwareProcessor.postProcessBeforeInitialization(ApplicationContextAwareProcessor.java:92)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:394)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1448)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519)
... 29 more
Caused by: org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [org.springframework.integration.http.inbound.HttpRequestHandlingMessagingGateway]: Constructor threw exception; nested exception is java.lang.NoClassDefFoundError: org/springframework/http/converter/json/MappingJackson2HttpMessageConverter
at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:162)
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:110)
at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:280)
... 49 more
Caused by: java.lang.NoClassDefFoundError: org/springframework/http/converter/json/MappingJackson2HttpMessageConverter
at org.springframework.integration.http.inbound.HttpRequestHandlingEndpointSupport.<init>(HttpRequestHandlingEndpointSupport.java:166)
at org.springframework.integration.http.inbound.HttpRequestHandlingMessagingGateway.<init>(HttpRequestHandlingMessagingGateway.java:72)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:147)
... 51 more
Caused by: java.lang.ClassNotFoundException: org.springframework.http.converter.json.MappingJackson2HttpMessageConverter
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at com.dsths.common.container.ContainerClassLoader.loadClass(ContainerClassLoader.java:136)
at org.eclipse.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:429)
at org.eclipse.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:382)
... 58 more
我有两个罐子jackson-core-asl-1.8.3
,并jackson-core-2.3.1
在类路径中。仍然我得到错误。如何解决问题?
MappingJackson2HttpMessageConverter 如何处理 Decimal 小数点保留 2 位问题?
这样使用不行,为什么?
public class CustomObjectMapper extends JsonSerializer<BigDecimal> {
@Override
public void serialize(BigDecimal value, JsonGenerator gen, SerializerProvider serializers)
throws IOException, JsonProcessingException {
DecimalFormat df = new DecimalFormat ("#.00");// 四舍五入
gen.writeString(df.format(value));
}
}
<mvc:annotation-driven>
<mvc:message-converters>
<bean
>
<property name="objectMapper">
<bean/>
<!-- <bean> -->
<!-- <property name="decimalFormat"> -->
<!-- <bean> -->
<!-- <constructor-arg type="java.lang.String" value="#.00" /> -->
<!-- </bean> -->
<!-- </property> -->
<!-- </bean> -->
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
今天的关于java – Spring REST | MappingJacksonHttpMessageConverter生成无效的JSON和springmvc输出json的分享已经结束,谢谢您的关注,如果想了解更多关于Fastjson、Jackson 与 SpringMVC 整合的 MessageConverter 配置、java – 自定义的Jackson HttpMessageConverter不再适用于Spring 4.2、java.lang.ClassNotFoundException:org.springframework.http.converter.json.MappingJackson2HttpMessageConverter、MappingJackson2HttpMessageConverter 如何处理 Decimal 小数点保留 2 位问题?的相关知识,请在本站进行查询。
本文标签: