Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Jackson处理java.util.Optional的Spring Rest控制器_Spring_Rest_Jackson_Java 8 - Fatal编程技术网

使用Jackson处理java.util.Optional的Spring Rest控制器

使用Jackson处理java.util.Optional的Spring Rest控制器,spring,rest,jackson,java-8,Spring,Rest,Jackson,Java 8,我有SpringRestController类来使用JSON处理rest服务。对于JSON,我使用的是Jackson。存在java.util.Optional类型的字段 private Optional<Long> start = Optional.empty(); 我正在使用的版本: 弹簧:4.1.5.释放 杰克逊:2.5.1 提前谢谢我能弄明白这一点。解决方案是注册对象映射器到消息转换器,如下所示 <bean id="objectMapper" class="org

我有SpringRestController类来使用JSON处理rest服务。对于JSON,我使用的是Jackson。存在java.util.Optional类型的字段

 private Optional<Long> start = Optional.empty();
我正在使用的版本:

弹簧:4.1.5.释放

杰克逊:2.5.1


提前谢谢

我能弄明白这一点。解决方案是注册对象映射器到消息转换器,如下所示

 <bean id="objectMapper"  class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean">
    <property name="modulesToInstall" value="com.fasterxml.jackson.datatype.jdk8.Jdk8Module" /> 
  </bean>
<mvc:annotation-driven>
    <mvc:message-converters>
        <bean
            class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
            <property name="objectMapper" ref="objectMapper" />
        </bean>
    </mvc:message-converters>
</mvc:annotation-driven>

<bean id="objectMapper" class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean">
    <property name="modulesToInstall"
        value="com.fasterxml.jackson.datatype.jdk8.Jdk8Module" />
</bean>

以上答案适用于Spring 4。 只需确保在xml配置中使用最新的xsd即可


在我的情况下,它以某种方式引用了“spring-mvc-3.0.xsd”,而这个版本还不知道“mvc:messageconverters”标记。将其更改为“spring mvc.xsd”解决了此问题。

如果您使用的是最新版本的spring boot,则可以通过在pom文件中添加以下依赖项来实现这一点

<dependency>
    <groupId>com.fasterxml.jackson.datatype</groupId>
    <artifactId>jackson-datatype-jdk8</artifactId>
</dependency>
然后使用上面Spring容器的映射器实例将对象转换为字符串

jacksonObjectMapper.writeValueAsString(user);

可选
不能用作字段。
<dependency>
    <groupId>com.fasterxml.jackson.datatype</groupId>
    <artifactId>jackson-datatype-jdk8</artifactId>
</dependency>
@Autowired
private ObjectMapper jacksonObjectMapper;
jacksonObjectMapper.writeValueAsString(user);