当前位置: 首页 > 知识库问答 >
问题:

通过MessageConverters即时启动序列化

晋坚
2023-03-14

我试图弄清楚如何配置的ObjectMapper中的RestTem板的默认MessageConverters序列化为一个ISO 8601格式化的字符串,而不是一个数字。我想避免在我的模型中注释每一个瞬间。

@SpringBootApplication
@RestController
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

    @PostMapping("/test")
    public String get(@RequestBody String object) {
        return object;
    }

    public String send(TestObject object) {
        return new RestTemplateBuilder().rootUri("http://localhost:8080").defaultMessageConverters().build()
            .exchange("/test", HttpMethod.POST, new HttpEntity<>(object, headers()), String.class).getBody();
    }

    private HttpHeaders headers() {
        final HttpHeaders httpHeaders = new HttpHeaders();
        httpHeaders.setContentType(MediaType.APPLICATION_JSON);
        return httpHeaders;
    }

    @AllArgsConstructor
    @Getter
    @Setter
    public static class TestObject {
        private Instant test;
    }
}

考虑到上面的代码,我希望这个测试能够通过

@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
@RunWith(SpringRunner.class)
public class InstantTest {

    @Autowired
    private DemoApplication client;

    @Test
    public void name() {
        final String time = "2018-10-09T12:00:00.000Z";
        final String response = client.send(new DemoApplication.TestObject(Instant.parse(time)));
        assertThat(response).contains(time);
    }
}

该示例使用jackson 2.9.6和Spring Boot 2.0.5。我已经试过了

  • 在自动配置的ObjectMapper上禁用写入日期时间戳为纳秒
  • 使用Spring。杰克逊。序列化。将时间戳写为纳秒=false
  • 提供Jackson2ObjectMapperBuilderCustomizer@Bean禁用写入时间戳为纳秒
  • 提供定制Jackson2ObjectMapperBuilder

我显然遗漏了一些东西,因为这感觉应该是默认行为,或者至少是易于配置的。

共有1个答案

元叶秋
2023-03-14

您可以使用Custom RestTemplateBuilder创建自己的RestTemplateBuilder并实现此功能。

例如。

@Configuration
public class Config{
    @Bean
    public RestTemplate  restTemplate() {
        RestTemplateBuilder builder = new RestTemplateBuilder();
        //You can initialize your custom message converter here;
        HttpMessageConverter<?> messageConverters = new  MappingJackson2HttpMessageConverter();
        builder.messageConverters(messageConverters);
        return builder.build();
    }
}

您可以使用自己的MessageConvertor将实例序列化为ISO 8601。

如需进一步阅读,请点击此链接。

 类似资料:
  • 我正在尝试发布我的第一个Android应用程序,以发送给一些测试人员。但是,我遇到了一个问题。当您退出应用程序,然后通过其图标启动它重新进入它时,它会重新启动整个应用程序,而不是返回到其以前的位置。即使您在退出后立即重新进入,也会发生这种情况。但是,如果我按住主屏幕按钮并通过最近的应用程序列表启动它,则不会发生这种情况。 我在网上搜索过其他有这个问题的人,只有少数人,但没有人能确切回答为什么会发生

  • 我有一个spring启动应用程序,我需要通过进入文件夹目录并通过命令行启动我的web应用程序来启动它。我有一门课叫应用。java及其内部代码如下所示。 我设置了类路径,然后试图运行命令"",但我得到了这个错误消息""

  • 我已经安装了以下版本,以使用硒与Chrome。chrome浏览器正在启动并打开所需的url,但立即被终止,窗口在几秒钟内关闭。请指导我需要做的任何更改。

  • 我正试图创建一个tabata计时器。我设法从editText中获取用户输入,并启动一个计时器,它表示准备时间。 当准备时间结束后,我想开始工作时间,然后是Rest时间。稍后,当用户输入时,我需要将Worktime和Resttime重复x次。但我想不通。 MainActivity.kt: 我设法导入了图书馆。 但我现在得到以下错误: 代码: 编辑:build.gradle(module.app):

  • 问题内容: 当前,我有一个Java Standalone Swing应用程序。 现在,当用户单击Swing应用程序中的按钮时,我想启动另一个Java应用程序(说:Calculator.jar) 我可以知道什么是便携式方法吗?这样它就可以在多个OS中工作吗? 问题答案: 使用或只是将其放在类路径中并调用其。

  • 显示 “无法导入资源”@AcmeDemoBundle/Controller/SecuredController。php“from”D:/UserData/WWWRoot/Symfony/app/config/routing。yml”。确保“AcmeDemoBundle/Controller/SECUEDCONTROLLER”。php“bundle已正确注册并加载到应用程序内核类中。” 这是我的 处