【问题标题】:RestTemplate - missing every number beyond millisecondsRestTemplate - 丢失超过毫秒的每个数字
【发布时间】:2014-12-26 23:36:06
【问题描述】:

在其余 Web 服务(例如 @Controller)中,我可以看到超过毫秒的时间,但在客户端通过 RestTemplate 使用其余 Web 服务时,第三个数字之外的每个字符都会丢失。例如,我可以看到 2014-12-22 09:52:35.371444 和 2014-12-22 09:52:34.00934 当我查看来自其余 Web 服务的返回(返回 testReturn)但我会看到 1419263555371 和 1419263554009 时我看客户端( _l )。我不是在询问格式(2014-12-22 09:52:35.371444 与 1419263555371)。我问的是在第一个示例中丢失 444,在第二个示例中丢失 34。请,如果有人用“objectMapper.enable(DeserializationFeature.etc)”指出一些解决方案,请告诉我如何设置它来影响 RestTemplate。我需要用“return testReturn”的完整时间戳填写“LogDisplay _l = restTemplate.postForObject”的返回。

//客户端

LogDisplay _l = restTemplate.postForObject(myServiceUrl,myPojoParameters, LogDisplay.class);

//与问题相关的pojo

import java.sql.Timestamp;

public class Lo_DisplayRecord { 
 String isParsable;
 private Timestamp dateTime;
       public Lo_DisplayRecord(String parseSw, Timestamp timeStamp){
              super();
              isParsable    = parseSw;
              dateTime      = timeStamp; //the question is related to this variable
       }

//包含其他pojo的pojo

@Component
public class LogDisplay {
       public LogDisplay(){}
       private ArrayList<Lo_DisplayRecord> displayValues; //pojo with the datetime variable
       private int reportRowsLimit = 0;
       private int reportRowsCount = 0;
       public int getReportRowsLimit() {
              return reportRowsLimit;
       }
       public ArrayList<Lo_DisplayRecord> getDisplayValues() {
              return displayValues;
       }
       public void setDisplayValues(ArrayList displayValues) {
              this.displayValues = displayValues;
       }
}

//休息网络服务

   @Autowired
   private LogDisplay testReturn;

   @RequestMapping(value="display/last", method=RequestMethod.POST)
   @ResponseBody
   @ResponseStatus(HttpStatus.OK)
   public LogDisplay getLast(@RequestBody Mas60010 mas60010) {

          try {
                 testReturn = lo_Mas60010.getLastDisplayValues(
              return testReturn;

//mvc-dispatcher-servlet.xml

<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
        <property name="messageConverters">
            <list>
                <ref bean="jsonMessageConverter"/>
            </list>
        </property>
    </bean>


    <bean id="jsonMessageConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
    </bean>

【问题讨论】:

    标签: java spring rest jackson resttemplate


    【解决方案1】:

    来自杰克逊文档:

    WRITE_DATE_TIMESTAMPS_AS_NANOSECONDS(默认值:false)(自 Jackson 2.2 起) 控制是否期望使用纳秒时间戳(启用)或不(禁用)写入数字时间戳值的功能;如果禁用,则采用标准毫秒时间戳。

    objectMapper.configure(SerializationFeature.WRITE_DATE_TIMESTAMPS_AS_NANOSECONDS,true);
    

    这应该可行。

    编辑:

    READ_DATE_TIMESTAMPS_AS_NANOSECONDS(默认值:false)——从 Jackson 2.2 开始 控制是否期望使用纳秒时间戳(启用)或不(禁用)写入数字时间戳值的功能;如果禁用,则采用标准毫秒时间戳。

    objectMapper.configure(DeserializationFeature.READ_DATE_TIMESTAMPS_AS_NANOSECONDS,true);
    

    还有反序列化的配置。

    【讨论】:

    • 不,它不会起作用。通过“restTemplate.postForObject(myServiceUrl,myPojoParameters, LogDisplay.class)”调用其余 Web 服务后,我丢失了纳秒时间戳。我需要在 RestTemplate 中启用“WRITE_DATE_TIMESTAMPS_AS_NANOSECONDS”功能。正如我在问题中所说,“如果有人用“objectMapper.enable(DeserializationFeature.etc)”指出一些解决方案,请告诉我如何设置它以影响 RestTemplate”。
    • 我添加了一张图片,向您展示您的建议不适用于我的情况。请查看第 131 行,我在其中调用了其余 Web 服务。如果我在 _l 中向您展示结果,您将看到纳秒已丢失。如何让 ObjectMapper.configure 干扰 RestTemplate.postForObject?有没有办法在 mvc-dispatcher-servlet.xml 中设置“DeserializationFeature.READ_DATE_TIMESTAMPS_AS_NANOSECONDS,true”,可能在 MappingJackson2HttpMessageConverter 下?
    • 看来我可以对messageConverter(restTemplate.setMessageConverters(messageConverters))进行更改,但我还没有弄清楚如何更改。
    猜你喜欢
    • 2015-01-10
    • 2023-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-31
    相关资源
    最近更新 更多