play를 사용하여 JSON 값을 Scala 클래스에 바인딩

블랭크 맨

사용자가 드롭 다운 값을 선택하고 입력 상자 등에 텍스트를 입력 할 수있는 상당히 복잡한 양식이 있습니다.

양식은 기본적으로 '고급 검색'유형의 양식입니다.

def search = Action(parse.json) { request =>
    val sR = request.body.validate[SearchRequest]
    sR.fold(
      errors => {
        BadRequest(Json.obj("status" -> "KO", "message" -> JsError.toJson(errors)))
      },
      searchRequest => {
        Logger.debug(s"searchRequest is $searchRequest")
        val sr = SearchResults(10)
        Ok(Json.toJson(sr))
      }
    )
  }

다음 값이있는 드롭 다운 목록이 있다고 가정 해 보겠습니다.

IsGreaThan
IsLessThan
EqualTo

내 SearchRequest는 다음과 같습니다.

case class SearchRequest(operator: String)

그러나 사용자가 잠재적으로 잘못된 데이터, 즉 'IsGreaterThan', 'IsLessThan'등이 아닌 다른 문자열을 보내는 것을 원하지 않습니다.

JSON이 SearchRequest 객체에 바인딩 될 때 어떻게 강력하게 입력 할 수 있습니까?

Millhouse

당신이 찾고 Reads있는 것은 열거 형에 대한 인스턴스 라고 생각 합니다. 즉 :

특정 SearchOperator열거 형을 선언합니다 .

object SearchOperator extends Enumeration {
  type SearchOperator = Value

  val IsGreaThan = Value("IsGreaThan")
  val IsLessThan = Value("IsLessThan")
  val EqualTo = Value("EqualTo")
}

SearchRequest케이스 클래스 에서 사용하십시오 .

case class SearchRequest(lhs: Int, operator: SearchOperator, rhs:Int)

읽는 방법을 정의하십시오.

object SearchRequestJson {
  implicit val soReads = Reads.enumNameReads(SearchOperator)
  implicit val srReads = Json.reads[SearchRequest]
}

핵심 Reads.enumNameReads은 버전 2.4에서 Play에 추가 된 기능이며, 상황에 맞는 상용구 더미를 저장합니다.

이제 검색 요청의 일부로 잘못된 값을 제출하면 :

{ "lhs": 42, "operator": "NotEqualTo", "rhs": 44 }

나는 얻는다 :

JsError(
  List(
    (/operator, List(
      ValidationError(
        List(error.expected.enumstring),
        WrappedArray()
      )
    ))
  )
)

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Jersey를 사용하여 JSON을 복잡한 Java 클래스에 바인딩

분류에서Dev

Scala Guice를 사용하여 특성을 개체에 바인딩

분류에서Dev

Angular.JS를 사용하여 JSON 값을 Syncfusion Circular 게이지에 바인딩

분류에서Dev

클래스를 사용하여 사전에 WPF 바인딩

분류에서Dev

JSON 결과를 사용하여 Model 클래스 객체를 Kendo Grid에 바인딩

분류에서Dev

Play Framework serializer를 사용하여 Scala에서 확장 된 클래스를 JSON으로 직렬화

분류에서Dev

청크 전송 인코딩을 사용하여 Scala Play 서버에서 케이스 클래스 객체 스트리밍

분류에서Dev

Play Framework 케이스 클래스 바인딩을 사용하여 비밀번호 필드를 확인하는 방법은 무엇입니까?

분류에서Dev

jquery ajax (MVC 4)를 사용하여 JSON 응답을 텍스트 상자에 바인딩 할 수 없습니다.

분류에서Dev

xamarin에서 매개 변수를 사용하여 값을 함수에 바인딩

분류에서Dev

JQUERY를 사용하여 데이터 세트를 포함하는 JSON을 드롭 다운 목록에 바인딩

분류에서Dev

MarkupExtension을 사용하여 ComboBox를 열거 형 값 컬렉션에 바인딩

분류에서Dev

어떻게 자바 (11) HttpClient를 잭슨을 사용하여 Java 클래스에 JSON 응답을지도로?

분류에서Dev

JNI를 사용하여 C ++ 클래스 멤버 함수를 Java에 바인딩

분류에서Dev

Ajax 호출을 사용하여 Json 데이터를 드롭 다운 목록에 바인딩

분류에서Dev

Scala에서 Play json을 사용하여 목록의 각 필드를 업데이트하는 방법

분류에서Dev

play framework 및 scala를 사용하여 json에 특정 경로가 있는지 확인하거나 찾습니다.

분류에서Dev

crm 초기 바인딩 클래스를 사용하여 linq에서 SQL로

분류에서Dev

ReactJS를 사용하여 ES6 클래스에 중첩 된 "this"바인딩

분류에서Dev

WPF C # x : array를 사용하여 WPF의 사용자 지정 모델 클래스에 목록을 바인딩하고 설정하는 방법

분류에서Dev

GSON 또는 Jackson을 사용하여 일반 인수를 사용하여 JSON을 클래스로 역 직렬화

분류에서Dev

YES / NO 값을 사용하여 확인란을 Datatable에 바인딩

분류에서Dev

play json을 사용하여 단일 값을 가진 json을 case 클래스로 변환하는 방법

분류에서Dev

Datacontext를 사용하여 WPF C #의 클래스 속성에 클래스 바인딩

분류에서Dev

메인 클래스에서 호출 / 설정된 다른 클래스를 사용하여 클래스에 값을 설정하는 방법

분류에서Dev

컨텍스트 주입을 사용하여 SpecFlow에서 단계 바인딩 클래스를 공유하는 방법

분류에서Dev

사전 (VB.NET, Devexpress)에 저장된 속성을 사용하여 세부 보고서를 클래스 모델에 바인딩

분류에서Dev

Scala에서 Circe를 사용하여 중첩 된 json을 List [Object]로 디코딩하는 방법

분류에서Dev

ng-repeat를 사용하여 동일한 값을 반복하고 ul에 바인딩하는 방법

Related 관련 기사

  1. 1

    Jersey를 사용하여 JSON을 복잡한 Java 클래스에 바인딩

  2. 2

    Scala Guice를 사용하여 특성을 개체에 바인딩

  3. 3

    Angular.JS를 사용하여 JSON 값을 Syncfusion Circular 게이지에 바인딩

  4. 4

    클래스를 사용하여 사전에 WPF 바인딩

  5. 5

    JSON 결과를 사용하여 Model 클래스 객체를 Kendo Grid에 바인딩

  6. 6

    Play Framework serializer를 사용하여 Scala에서 확장 된 클래스를 JSON으로 직렬화

  7. 7

    청크 전송 인코딩을 사용하여 Scala Play 서버에서 케이스 클래스 객체 스트리밍

  8. 8

    Play Framework 케이스 클래스 바인딩을 사용하여 비밀번호 필드를 확인하는 방법은 무엇입니까?

  9. 9

    jquery ajax (MVC 4)를 사용하여 JSON 응답을 텍스트 상자에 바인딩 할 수 없습니다.

  10. 10

    xamarin에서 매개 변수를 사용하여 값을 함수에 바인딩

  11. 11

    JQUERY를 사용하여 데이터 세트를 포함하는 JSON을 드롭 다운 목록에 바인딩

  12. 12

    MarkupExtension을 사용하여 ComboBox를 열거 형 값 컬렉션에 바인딩

  13. 13

    어떻게 자바 (11) HttpClient를 잭슨을 사용하여 Java 클래스에 JSON 응답을지도로?

  14. 14

    JNI를 사용하여 C ++ 클래스 멤버 함수를 Java에 바인딩

  15. 15

    Ajax 호출을 사용하여 Json 데이터를 드롭 다운 목록에 바인딩

  16. 16

    Scala에서 Play json을 사용하여 목록의 각 필드를 업데이트하는 방법

  17. 17

    play framework 및 scala를 사용하여 json에 특정 경로가 있는지 확인하거나 찾습니다.

  18. 18

    crm 초기 바인딩 클래스를 사용하여 linq에서 SQL로

  19. 19

    ReactJS를 사용하여 ES6 클래스에 중첩 된 "this"바인딩

  20. 20

    WPF C # x : array를 사용하여 WPF의 사용자 지정 모델 클래스에 목록을 바인딩하고 설정하는 방법

  21. 21

    GSON 또는 Jackson을 사용하여 일반 인수를 사용하여 JSON을 클래스로 역 직렬화

  22. 22

    YES / NO 값을 사용하여 확인란을 Datatable에 바인딩

  23. 23

    play json을 사용하여 단일 값을 가진 json을 case 클래스로 변환하는 방법

  24. 24

    Datacontext를 사용하여 WPF C #의 클래스 속성에 클래스 바인딩

  25. 25

    메인 클래스에서 호출 / 설정된 다른 클래스를 사용하여 클래스에 값을 설정하는 방법

  26. 26

    컨텍스트 주입을 사용하여 SpecFlow에서 단계 바인딩 클래스를 공유하는 방법

  27. 27

    사전 (VB.NET, Devexpress)에 저장된 속성을 사용하여 세부 보고서를 클래스 모델에 바인딩

  28. 28

    Scala에서 Circe를 사용하여 중첩 된 json을 List [Object]로 디코딩하는 방법

  29. 29

    ng-repeat를 사용하여 동일한 값을 반복하고 ul에 바인딩하는 방법

뜨겁다태그

보관