java - 如何从 spring mvc 和 hibernate 中的 json 响应获取日期格式响应而不是毫秒

标签 java json hibernate spring-mvc

我正在使用 springmvc 和 hibernate 做一个休息服务示例,其中我得到日期数据类型的毫秒格式的日期响应,我通过谷歌搜索使用了下面的代码,但这些代码没有效果,结果相同毫秒格式。下面是我使用的代码

Controller .java

/* Getting List of objects in Json format in Spring Restful Services */  
 @RequestMapping(value = "/list", method = RequestMethod.GET)  
 public @ResponseBody  List getDatalist() { 
  List DataList = null;  
  try {  
      DataList = dataServices.getDataEntityList();  
  } catch (Exception e) {  
   e.printStackTrace();  
  }  
  return DataList;  
 }   

DataValueTable.java

  @JsonAutoDetect
@Entity  
@Table(name = "DataValueTable")  
@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})  
public class DataValueTable  implements Serializable {  

 private static final long serialVersionUID = 1L;  

 @Id  
 @GeneratedValue  
 @Column(name = "ID")  
 private long id;  

 @JsonSerialize(using=JsonDateSerializer.class)
 @Column(name = "Datatype") 
 private Date dataType;  

 @Column(name = "Datacategory")  
 private String dataCategory;  

 @Column(name = "DataValue")  
 private boolean dataValue;
     public Date getDataType() {
    return dataType;
}

public void setDataType(Date dataType) {
    this.dataType = dataType;
}

JsonDateSerializer.java

package com.beingjavaguys.model;

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.codehaus.jackson.JsonGenerator;
import org.codehaus.jackson.JsonProcessingException;
import org.codehaus.jackson.map.JsonSerializer;
import org.codehaus.jackson.map.SerializerProvider;
import org.springframework.stereotype.Component;
/**
 * Used to serialize Java.util.Date, which is not a common JSON
 * type, so we have to create a custom serialize method;.
 *
 * @author Loiane Groner
 * http://loianegroner.com (English)
 * http://loiane.com (Portuguese)
 */
@Component
public class JsonDateSerializer extends JsonSerializer<Date>{
private static final SimpleDateFormat dateFormat = new SimpleDateFormat("MM-dd-yyyy");
@Override
public void serialize(Date date, JsonGenerator gen, SerializerProvider provider)
throws IOException, JsonProcessingException {
String formattedDate = dateFormat.format(date);
gen.writeString(formattedDate);
}
}

spring-config.xml

 <context:component-scan base-package="com.beingjavaguys.controller" />  
 <mvc:annotation-driven />  

 <bean id="dataSource"  
  class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
  <property name="driverClassName" value="com.microsoft.sqlserver.jdbc.SQLServerDriver" />  
  <property name="url" value="jdbc:sqlserver://localhost;database=Sample" />  
  <property name="username" value="sdsd" />  
  <property name="password" value="sdsd" /> 
    <property name="hibernate.dialect" value="com.beingjavaguys.model.SqlServerDialectWithNvarchar" /> 
 </bean>  


 <bean id="sessionFactory"  
 class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">  
 <property name="dataSource" ref="dataSource" />  
 <property name="annotatedClasses">  
 <list>  
   <value>com.beingjavaguys.model.Employee</value>   
      <value>com.beingjavaguys.model.DataValueTable</value> 
   </list>  
  </property>  
  <property name="hibernateProperties">  
   <props>  

    <prop key="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</prop>  
    <prop key="hibernate.show_sql">${hibernate.show_sql}</prop>  
   </props>  
  </property>  
 </bean>  


 <bean id="txManager"  
  class="org.springframework.orm.hibernate4.HibernateTransactionManager">  
  <property name="sessionFactory" ref="sessionFactory" />  
 </bean>  

 <bean id="persistenceExceptionTranslationPostProcessor"  
  class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor" />  

 <bean id="dataDao" class="com.beingjavaguys.dao.DataDaoImpl"></bean>  
 <bean id="dataServices" class="com.beingjavaguys.services.DataServicesImpl"></bean>  
</beans>  

现在我收到的回复为“12312121000”。我希望它以 02-02-2015 格式显示。欢迎任何建议和答案。

最佳答案

使用 Jackson,您可以注释实体,例如

@JsonFormat(shape=JsonFormat.Shape.STRING, pattern="yyyy-MM-dd HH:mm:ss.000 ", timezone="UTC")
public Timestamp getDate() {
    return date;
}

这是我用来获取模式中时间戳的测试用例示例。

    ObjectMapper mapper = new ObjectMapper();
    JaxbAnnotationModule module = new JaxbAnnotationModule();
    mapper.registerModule(module);      
    mapper.setSerializationInclusion(Include.NON_NULL);
    // Object to JSON - entityBean I want to map to JSON
    String jsonOutput = mapper.writeValueAsString(entityBean);

注意。您必须将带注释的 JsonFormat 分配给 getter 方法。

关于java - 如何从 spring mvc 和 hibernate 中的 json 响应获取日期格式响应而不是毫秒,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34771646/

相关文章:

java - 如何使用 spring data mongorepository 对嵌入数组进行排序和限制

java - 如何在不覆盖现有数据的情况下使用 DOM append 现有 XML 文件?在 java

c# - 使用 Json.Net 时,无法从字符串正确反序列化异常

java - 我无法从 hibernate 项目自动创建表

java - JPA一对多双向堆栈溢出问题

java - 无法使用 JavaFX 获取标签来更新其文本

java - 休息客户端异常 : Could not write request: no suitable HttpMessageConverter found for request type

java - 将 JAVA String 转换为 JSON 对象时出现 NullPointerException

java - Hibernate 的 Projections.countDistinct 会产生意想不到的结果

java - hibernate 。什么时候同一实体可以在一个 session 中加载两次?