이번 글에서는 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 구성 파일에서
<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)를 참고하세요. !

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

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

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

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

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

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

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

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


핫 AI 도구

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

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

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

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

인기 기사

뜨거운 도구

ZendStudio 13.5.1 맥
강력한 PHP 통합 개발 환경

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

Atom Editor Mac 버전 다운로드
가장 인기 있는 오픈 소스 편집기

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

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