springmvc 학습 노트-json 의 날짜 형식 문 제 를 되 돌려 주 는 해결 방법

6810 단어 springmvcjson날짜.
질문
(1)json 데이터 출력 
springmvc 에서 jackson-mapper-asl 을 사용 하면 json 출력 을 할 수 있 습 니 다.설정 에 있어 서 몇 가지 가 있 습 니 다. 
1.화면 음악:annotation-driven 사용
2.의존 관리 에 잭 슨-mapper-asl 추가

 <dependency>
     <groupId>org.codehaus.jackson</groupId>
     <artifactId>jackson-mapper-asl</artifactId>
     <version>${jackson.version}</version>
 </dependency> 
3.주석 사용@ResponseBody
화면 음악:annotation-driven 은 기본적으로 json 컨버터 를 불 러 왔 습 니 다.우 리 는 위의 의존 패 키 지 를 추가 한 후에 주석@ResponseBody 를 사용 하여 json 데 이 터 를 되 돌려 줄 수 있 습 니 다.예 를 들 어:

@RequestMapping("json")
  @ResponseBody
  public List<User> userList(ModelMap modelMap){
    UserExample example = new UserExample();
    example.createCriteria().andUsernameIsNotNull();
    List<User> users = userMapper.selectByExample(example);
    return users;
  }
(2)json 출력 날짜 형식 포맷
위 에서 json 을 출력 했 지만 json 의 date 형식의 속성 은 모두 long 값 입 니 다.페이지 에서 꺼 내 는 것 이 외국 의 날짜 형식 인 것 처럼 우 리 는 날짜 의 형식 을 원 하 는 형식 으로 변환 하 는 형식 을 추가 해 야 합 니 다.yyy-MM-dd.
1.@JSonFormat 사용(pattern="yyy-MM-dd HH:mm:ss",timezone="GMT+8")
실체 클래스 의 getter 방법 에@JSonFormat(pattern="yyy-MM-dd HH:mm:ss",timezone="GMT+8")을 추가 하면 json 의 날 짜 를 포맷 할 수 있 습 니 다.
첫 번 째 시 도 는 항상 실 패 했 습 니 다.나중에 완전한 의존 가방 을 추가 한 후에 성공 하려 면 다음 과 같은 몇 가지 의존 도 를 추가 해 야 합 니 다.

<!-- json   -->
    <dependency>
      <groupId>org.codehaus.jackson</groupId>
      <artifactId>jackson-mapper-asl</artifactId>
      <version>${jackson.version}</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-core</artifactId>
      <version>${jackson.core.version}</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>${jackson.core.version}</version>
    </dependency>


<properties>
    <jackson.version>1.9.13</jackson.version>
    <jackson.core.version>2.4.2</jackson.core.version>
</properties>

장점 은 간단 하고 편리 하 며,단점 은 모든 필요 한 속성의 getter 방법 에 추가 해 야 한 다 는 것 이다.거시적 으로 보면 비교적 번 거 롭 지만 실제 개발 에서 도 한 줄 의 코드 만 있 는 일 은 유일 하 게 좋 지 않 은 것 은 my batis 가 실체 류 를 자동 으로 생 성하 여 덮어 쓰 는 것 이다.
2.ObjectMapper 를 계승 하여 json 문자열 을 되 돌려 줍 니 다.
위의 방법 에서 간단 하고 편리 하지만 단점 도 뚜렷 하 다.자동 생 성 코드 는 실체 류 를 덮어 쓰 고 모든 날짜 속성 은 수 동 으로 추가 해 야 하 며 실제 날짜 속성 은 보편적으로 필요 하 다.따라서 전체 적 으로 처리 하고 격식 을 통일 할 수 있다.데이터베이스 에 있 는 date 와 timestamp 는 my batis 에서 date 대상 으로 변 환 됩 니 다.생일 이 일 까지 정확 하고 시간 이 초 까지 정확 한 형식 규범 은 디 스 플레이 층 을 처리 할 수 있다.yyy-MM-dd HH:mm:ss 로 통일
MappingJackson HttpMessageConverter 는 주로 ObjectMapper 를 통 해 json 문자열 을 되 돌려 줍 니 다.여기 서 우 리 는 이 종 류 를 계승 하여 JSonSerializer를 등록 합 니 다.그리고 설정 파일 에 사용자 정의 Object Mapper 를 주입 합 니 다.
2.1 하위 클래스 계승 ObjectMapper 작성

package com.demo.common.util.converter;

import org.codehaus.jackson.JsonGenerator;
import org.codehaus.jackson.JsonProcessingException;
import org.codehaus.jackson.map.JsonSerializer;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.map.SerializerProvider;
import org.codehaus.jackson.map.ser.CustomSerializerFactory;

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 *   Date    json        
 * Created by Administrator on 2016/2/14.
 */
public class CustomJsonDateConverter extends ObjectMapper {
  public CustomJsonDateConverter(){
    CustomSerializerFactory factory = new CustomSerializerFactory();
    factory.addGenericMapping(Date.class, new JsonSerializer<Date>(){
      @Override
      public void serialize(Date value,
                 JsonGenerator jsonGenerator,
                 SerializerProvider provider)
          throws IOException {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        jsonGenerator.writeString(sdf.format(value));
      }
    });
    this.setSerializerFactory(factory);
  }
}

2.2 spring 파일 설정

<mvc:annotation-driven>
    <mvc:message-converters>
      <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
        <property name="objectMapper" ref="customObjectMapper"></property>
      </bean>
    </mvc:message-converters>
  </mvc:annotation-driven>
  <bean id="customObjectMapper" class="com.demo.common.util.converter.CustomJsonDateConverter"></bean>
 2.3 디 스 플레이 층 이 날짜 형식 길 이 를 자율 적 으로 결정 합 니 다.
이 설정 은 이전@JSonFormat 과 함께 사용 할 수 없습니다.전역 적 으로 날짜 형식 이 통일 되 었 기 때문에 날짜 와 datetime,timestamp 는 모두 하나의 형식 입 니 다.생일 등 date 필드 를 간소화 해 야 한다 면 디 스 플레이 층 에서 만 재단 할 수 있 습 니 다.
3.내 장 된 날짜 포맷 도구 사용
json 이 응답 하 는 날짜 형식 을 전역 적 으로 설정 하지만 이 방법 은@JSonFormat 과 공존 할 수 있 습 니 다.즉,전역 적 으로 형식 을 설정 할 수 있 고 특정한 수 요 는 주석 설정 을 사용 할 수 있 습 니 다.
3.1 spring 파일 설정

<mvc:annotation-driven> 
  <!--   responseBody        --> 
    <mvc:message-converters> 
      <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"> 
        <property name="objectMapper"> 
          <bean class="com.fasterxml.jackson.databind.ObjectMapper"> 
            <property name="dateFormat"> 
              <bean class="java.text.SimpleDateFormat"> 
                <constructor-arg type="java.lang.String" value="yyyy-MM-dd HH:mm:ss" /> 
              </bean> 
            </property> 
          </bean> 
        </property> 
      </bean> 
    </mvc:message-converters> 
  </mvc:annotation-driven>
3.2 특정한 날짜 설정

 @JsonFormat(pattern="yyyy-MM-dd",timezone = "GMT+8")
  public Date getBirth() {
    return birth;
  } 
3.3 최종 

이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기