찾다
Javajava지도 시간Java8 시간 JSON 데이터를 반환하는 SpringMVC의 형식 문제를 해결하는 방법에 대한 자세한 설명

이번 글에서는 Java8 시간 JSON 데이터를 반환하는 SpringMVC의 포맷팅 문제를 해결하는 방법을 주로 소개합니다. 편집자는 꽤 괜찮다고 생각해서 지금 공유하고 참고용으로 올려드리겠습니다. 에디터를 따라가서 살펴보자

Spring MVC에서 JSON 형식으로 응답을 반환할 때 @ResponseBody 어노테이션을 사용하는 경우가 있는데, java8에서는 시간을 처리할 때 매우 번거로울 수 있다. 일반적으로 우리가 사용하는 HTTPMessageConverter는 다음과 같다. MappingJackson2HttpMessageConverter이며 기본적으로 반환되는 시간 형식은 다음과 같습니다.

"startDate" : {
  "year" : 2010,
  "month" : "JANUARY",
  "dayOfMonth" : 1,
  "dayOfWeek" : "FRIDAY",
  "dayOfYear" : 1,
  "monthValue" : 1,
  "hour" : 2,
  "minute" : 2,
  "second" : 0,
  "nano" : 0,
  "chronology" : {
   "id" : "ISO",
   "calendarType" : "iso8601"
  }
 }

그러나 우리는 이것을 프런트 엔드로 반환하지 않을 것입니다. LocalDate용입니다. 형식은 2016-11-26이고, LocalDateTime이 반환하려는 형식은 2016-11-26 21:04:34와 같은 데이터입니다. 프로젝트 리서치와 관련 정보 컨설팅을 통해 이를 개인 리서치로 구현하는 방법은 두 가지가 있습니다.

해결책 1:

Maven 프로젝트인 경우 다음 jar 패키지를 pom에 도입합니다.

<dependency>
   <groupId>com.fasterxml.jackson.datatype</groupId>
   <artifactId>jackson-datatype-jsr310</artifactId>
   <version>2.8.5</version>
 </dependency>

그런 다음 JSON화하려는 POJO 필드의 get 함수에 다음과 같이 @JsonSerializer 주석을 추가합니다

import com.fasterxml.jackson.annotation.JsonFormat;

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd")
public LocalDateTime getBirthday() {
    return this.loginTime;
  }

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
public LocalDateTime getLastLoginTime() {
    return this.loginTime;
  }

이 방법의 장점은 특정 도메인 유형에 대해 다른 표시 방법을 설정할 수 있다는 것입니다. 그러나 각 날짜 속성을 수동으로 추가해야 하기 때문에 단점이기도 합니다. 추가 jsr310 jar 패키지를 도입해야 합니다.

해결책 2:

ObjectMapper를 상속하여 json 문자열을 반환합니다. MappingJackson2HttpMessageConverter는 주로 ObjectMapper를 사용하여 json 문자열을 반환합니다. 여기서는 JsonUtil 클래스를 작성하고 ObjectMapper를 얻어 java8의 새 날짜 및 시간 API에 해당하는 JsonSerializer

/**
 * json处理工具类
 * 
 * 
 */
@Component
public class JsonUtil {

  private static final ObjectMapper mapper;

  public ObjectMapper getMapper() {
    return mapper;
  }

  static {

    mapper = new ObjectMapper();

    SimpleModule module = new SimpleModule();
    module.addSerializer(LocalDate.class, new LocalDateSerializer());
    module.addSerializer(LocalTime.class, new LocalTimeSerializer());
    module.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer());
    mapper.registerModule(module);
  }

  public static String toJson(Object obj) {
    try {
      return mapper.writeValueAsString(obj);
    } catch (Exception e) {
      throw new RuntimeException("转换json字符失败!");
    }
  }

  public <T> T toObject(String json, Class<T> clazz) {
    try {
      return mapper.readValue(json, clazz);
    } catch (IOException e) {
      throw new RuntimeException("将json字符转换为对象时失败!");
    }
  }
}

class LocalDateSerializer extends JsonSerializer<LocalDate> {

  private static final DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");

  @Override
  public void serialize(LocalDate value, JsonGenerator jgen, SerializerProvider provider)
      throws IOException, JsonProcessingException {
    jgen.writeString(dateFormatter.format(value));
  }
}

class LocalDateTimeSerializer extends JsonSerializer<LocalDateTime> {

  private static final DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");

  @Override
  public void serialize(LocalDateTime value, JsonGenerator jgen, SerializerProvider provider)
      throws IOException, JsonProcessingException {
    jgen.writeString(dateTimeFormatter.format(value));
  }

}

class LocalTimeSerializer extends JsonSerializer<LocalTime> {

  private static final DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern("HH:mm:ss");

  @Override
  public void serialize(LocalTime value, JsonGenerator jgen, SerializerProvider provider)
      throws IOException, JsonProcessingException {
    jgen.writeString(timeFormatter.format(value));

  }

}

그런 다음 springmvc 구성 파일에서 를 다음 구성으로 변경하여 새로운 json 변환 변환기를 구성합니다. ObjectMapper 객체를 JsonUtil의 objectMapper 객체로 변환합니다. 이 변환기는 spring의 내장 json 변환기보다 우선순위가 높으므로 spring은 json 관련 변환에 이를 먼저 사용합니다.

<mvc:annotation-driven>
    <mvc:message-converters>
      <bean
        class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
        <property name="objectMapper" value="#{jsonUtil.mapper}" />
        <property name="supportedMediaTypes">
          <list>
            <value>application/json;charset=UTF-8</value>
          </list>
        </property>
      </bean>
    </mvc:message-converters>
  </mvc:annotation-driven>

그러면 java8의 여러 날짜 및 시간 유형이 정상적으로 표시될 수 있습니다. 날짜, 시간 등의 타입을 전역적으로 균일하게 관리한다는 장점이 있지만, POJO의 특정 필드를 특수하게 처리한다는 단점이 있다.

위 내용은 Java8 시간 JSON 데이터를 반환하는 SpringMVC의 서식 문제를 해결하는 방법에 대한 자세한 설명입니다. 자세한 내용은 PHP 중국어 웹사이트(www.php.cn)를 참고하세요. !


성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
Java 플랫폼 독립성 : OS의 차이점Java 플랫폼 독립성 : OS의 차이점May 16, 2025 am 12:18 AM

다양한 운영 체제에서 Java의 성능에 미묘한 차이가 있습니다. 1) JVM 구현은 핫스팟 및 OpenJDK와 같은 성능 및 쓰레기 수집에 영향을 미칩니다. 2) 파일 시스템 구조 및 경로 분리기는 다르므로 Java 표준 라이브러리를 사용하여 처리해야합니다. 3) 네트워크 프로토콜의 차별적 구현은 네트워크 성능에 영향을 미칩니다. 4) GUI 구성 요소의 외관과 동작은 시스템마다 다릅니다. 표준 라이브러리 및 가상 기계 테스트를 사용하면 이러한 차이의 영향을 줄이고 Java 프로그램을 통해 원활하게 실행할 수 있습니다.

Java의 가장 좋은 기능 : 객체 지향 프로그래밍에서 보안에 이르기까지Java의 가장 좋은 기능 : 객체 지향 프로그래밍에서 보안에 이르기까지May 16, 2025 am 12:15 AM

javaoffersrobustobject-eientedprogramming (OOP) 및 top-notchsecurityfeatures.1) oopinjavaincludesclasses, 객체, 상속, 다형성, 및 캡슐화, 2) inablingflexibleantaintainableystems.2) secere-featecludejavirtmachine (jVM)

JavaScript 대 Java를위한 최고의 기능JavaScript 대 Java를위한 최고의 기능May 16, 2025 am 12:13 AM

javaScriptandjavahavedistInctStrengths : javaScriptexcelsindynamictypingandasynchronousprogramming, whilejavaisrobustwithstrongoopandtyping.1) javaScript'sdynamicnatureallowsforrapiddevelopmentand prothotyping, withasync/withasynon-blockingi/o.2)

Java 플랫폼 독립성 : 혜택, 제한 및 구현Java 플랫폼 독립성 : 혜택, 제한 및 구현May 16, 2025 am 12:12 AM

javaachievesplatforminccendenceThermeThoughthejavavirtualMachine (JVM) 및 BYTECODE.1) thejvmGretsByTecode, thesAmeCodetorUnonOnonAnyPlatFormwithajvm.2) bytecodeiscomeDeDfromjavasourcodeanDisplatform-howhowhowhownectection, howludection, howludectionnectection

Java : 실제 단어의 플랫폼 독립성Java : 실제 단어의 플랫폼 독립성May 16, 2025 am 12:07 AM

java'splatforminccendenceMeansapplicationsCannonanyplatformwithajvm, "WriteOnce, Runanywhere"를 활성화하지만, 도전적인 jvminconsistencies, libraryportability 및 andperformancevariations.toaddressthese : 1) Usecross-platformtestingtools, 2).

JVM 성능 대 기타 언어JVM 성능 대 기타 언어May 14, 2025 am 12:16 AM

JVM 'sperformanceIscompetitive, ontotherRuntimes, 안전 및 생산성을 제공합니다

Java 플랫폼 독립성 : 사용의 예Java 플랫폼 독립성 : 사용의 예May 14, 2025 am 12:14 AM

javaachievesplatformincendenceThermeThoughthejavavirtualMachine (JVM), codeiscompiledintobytecode, notmachine-specificcode.2) bytecodeistredbythejvm, anblingcross- shoughtshoughts

JVM 아키텍처 : Java Virtual Machine에 대한 깊은 다이빙JVM 아키텍처 : Java Virtual Machine에 대한 깊은 다이빙May 14, 2025 am 12:12 AM

thejvmisanabstractcomputingmachinecrucialforrunningjavaprogramsduetoitsplatform-independentarchitection.itincludes : 1) classloaderforloadingclasses, 2) runtimeDataAreaFordatorage, 3) executionEnginewithgringreter, jitcompiler 및 ggarocubucbugecutec

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

Nordhold : Fusion System, 설명
1 몇 달 전By尊渡假赌尊渡假赌尊渡假赌
<exp exp> 모호한 : 원정 33- 완벽한 크로마 촉매를 얻는 방법
2 몇 주 전By尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

ZendStudio 13.5.1 맥

ZendStudio 13.5.1 맥

강력한 PHP 통합 개발 환경

SecList

SecList

SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.

Atom Editor Mac 버전 다운로드

Atom Editor Mac 버전 다운로드

가장 인기 있는 오픈 소스 편집기

MinGW - Windows용 미니멀리스트 GNU

MinGW - Windows용 미니멀리스트 GNU

이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.

맨티스BT

맨티스BT

Mantis는 제품 결함 추적을 돕기 위해 설계된 배포하기 쉬운 웹 기반 결함 추적 도구입니다. PHP, MySQL 및 웹 서버가 필요합니다. 데모 및 호스팅 서비스를 확인해 보세요.