반응형
Jackson Scala 모듈의 작은 예
Scala 모듈 2.10을 사용한 Jackson의 시리얼화/디시리얼화의 간단한 예를 소개해 주시겠습니까?필드별 주석이나 할당이 필요 없는 리플렉션 기반의 JSON을 찾고 있습니다.이렇게 하면 될 것 같은데 문서에는 예가 포함되어 있지 않습니다.
케이스 클래스가 있는 경우:
case class Person(name:String, age:Int)
val person = Person("Fred", 65)
그래서 그들의 gitub readme에서:
val mapper = new ObjectMapper()
mapper.registerModule(DefaultScalaModule)
좋아, 이제 어쩌지?p를 JSON으로/JSON에서 변환하려면 어떻게 해야 하나요?
한 번 시도해 보세요.
val person = Person("fred", 25)
val mapper = new ObjectMapper()
mapper.registerModule(DefaultScalaModule)
val out = new StringWriter
mapper.writeValue(out, person)
val json = out.toString()
println(json)
val person2 = mapper.readValue(json, classOf[Person])
println(person2)
편집
꼭 선언해 주세요.Person
그렇지 않으면 작동하지 않습니다.
다음은 완전한 예입니다.
package com.example.samples
import org.junit.Test
import com.fasterxml.jackson.databind.ObjectMapper
import org.springframework.context.annotation.Bean
import java.io.File
import com.fasterxml.jackson.module.scala.DefaultScalaModule
import java.io.StringWriter
class JacksonTest {
@Test
@throws[Exception] def jacksonTest(): Unit = {
//case class Person(var name: String = "", var age: Int = 0)
//case class Person(@Bean var name: String, @Bean var age: Int)
case class Person( name: String, age: Int )
val person = Person("fred", 25)
val mapper = new ObjectMapper()
mapper.registerModule(DefaultScalaModule)
val out = new StringWriter
mapper.writeValue(out, person)
val json = out.toString()
println(json)
val person2 = mapper.readValue(json, classOf[Person])
println(person2)
}
}
그러나 mapper.readValue에서는 실패합니다.
설정은 다음과 같습니다.
<!-- Jackson libraries for JSON marshalling and unmarshalling -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.2.3</version>
</dependency>
<!-- Jackson module for scala object marshalling and unmarshalling -->
<dependency>
<groupId>com.fasterxml.jackson.module</groupId>
<artifactId>jackson-module-scala_2.10</artifactId>
<version>2.2.2</version>
</dependency>
<!-- Scala Compiler -->
<dependency>
<groupId>org.scala-lang</groupId>
<artifactId>scala-compiler</artifactId>
<version>2.10.2</version>
</dependency>
왜 실패했는지 아십니까?작업 예시와 차이를 알 수 없습니다.
변환할 일반 함수를 만들었습니다.JSON String to Case Class/Object
그리고.Case Class/Object to JSON String
.
에서 필요한 SBT 의존관계build.sbt
파일:
name := "jackson-example"
scalaVersion := "2.12.11"
libraryDependencies += "com.fasterxml.jackson.module" %% "jackson-module-scala" % "2.10.1"
libraryDependencies += "com.fasterxml.jackson.core" % "jackson-databind" % "2.10.1"
케이스 클래스/오브젝트에 대한 JSON 문자열
def fromJson[T](json: String)(implicit m: Manifest[T]): Option[T] = {
Try {
lazy val mapper = new ObjectMapper() with ScalaObjectMapper
mapper.registerModule(DefaultScalaModule)
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
mapper.readValue[T](json)
} match {
case Success(x) => Some(x)
case Failure(err) => {
logger.error("@@@@Got " + err.getMessage() + " while JSON to Object:--> " + json)
None
}
}
}
케이스 클래스/오브젝트에서 JSON 문자열로의
def toJson[T](obj: T)(implicit m: Manifest[T]): Option[String] = {
Try {
lazy val mapper = new ObjectMapper() with ScalaObjectMapper
mapper.registerModule(DefaultScalaModule)
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
mapper.writeValueAsString(obj)
} match {
case Success(x) => Some(x)
case Failure (err) => {
logger.error("@@@@Got " + err.getMessage() + " while converting object to JSON:--> " + obj)
None
}
}
}
언급URL : https://stackoverflow.com/questions/16966743/small-example-of-jackson-scala-module
반응형
'code' 카테고리의 다른 글
React Native에서 상위 화면 너비의 80%를 표시합니다. (0) | 2023.04.03 |
---|---|
ajax success 콜백 함수 내의 $(this)에 액세스하는 방법 (0) | 2023.03.29 |
@ExceptionHandler(Spring REST)에서 @RequestBody를 얻는 방법 (0) | 2023.03.29 |
jQuery-UI - "정의되지 않은 속성 '단계'를 읽을 수 없습니다" (0) | 2023.03.29 |
ASP.NET Core가 상태 코드와 함께 JSON을 반환합니다. (0) | 2023.03.29 |