Play 2.5에 입문 ⑦ httpie를 사용하면서 Play'R의 예제를 수정
10007 단어 PlayFrameworkhttpieScalaPlayR
예제의 수정에 도전
지난번 본 Play Scala의 간단 REST 프레임워크 Play'R, 좋은 생각이었지만, 예제의 갱신계(PUT/POST)가 움직이지 않았다. 확실히 봐, 어떠한 이유로, Json 주위의 처리가 쓰여지지 않았던 것 같기 때문에, 데이터를 갱신할 수 있도록 해 두자.
PUT 방법의 수정
먼저 Person 재 작성 (PUT)에 대한 방법을 수정합니다.
controller/PersonController.scala def write(person: Person) = Action { request =>
request.body.asText match {
case Some(name) if (name.length > 0) => Ok(personContainer.update(person.copy(name=name)).name)
case _ => BadRequest("Invalid name")
}
}
지난번 같이, httpie를 사용해 PUT의 거동을 봐 두자.
PUT 메소드에서 Jane이 JIRO로 바뀌지 않는 것이 문제.
이것은, 메소드중에서의 AnyContentAsJson 클래스 의 취급이 부적절한 것에 의한다.
무슨 일이 일어나고 있는지 print 문 디버그로 시도해 봅시다.
controller/PersonController.scala def write(person: Person) = Action { request =>
println("!!!!!!!!!AnyContentAsJsonの挙動だよ!!!!!!!!!")
println("request.body ="+request.body)
println("request.body.asJson ="+request.body.asJson)
println("request.body.asText ="+request.body.asText)
println("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!")
request.body.asText match {
case Some(name) if (name.length > 0) => Ok(personContainer.update(person.copy(name=name)).name)
case _ => BadRequest("Invalid name")
}
}
play 측의 로그를 보면 request.body.asText의 변환이 무의미하다는 것을 알 수 있습니다.
따라서 다음과 같이 asJson을 사용하는 형식으로 다시 작성해 보겠습니다.
controller/PersonController 개.scala
//jsonの扱いに必要なライブラリをインポートしておく
import play.api.libs.json._
import play.api.libs.functional.syntax._
...
def write(person: Person) = Action { request =>
request.body.asJson match {
case Some(jsObj) =>
val name = (jsObj \\ "name").head.toString
Ok(personContainer.update(person.copy(name=name)).name)
case _ => BadRequest("Invalid name")
}
}
작동했다.
POST 메소드 재작성
마찬가지로, 신규 등록에 관한 create 메소드를 재작성해 둔다(원 코드는 생략).
controller/PersonController 개.scala def create = Action { request =>
request.body.asJson match {
case Some(jsObj) =>
val name = (jsObj \\ "name").head.toString
Created(personContainer.add(name).name)
case _ => BadRequest("Invalid name")
}
}
... ID가 하나 날아 6번이 되어 버렸지만, 동작했다.
감상과 다음의 대처
Httpie(혹은 curl)과 play의 동적 컴파일 기능을 조합하는 것으로, 예제를 용이하게 수정할 수 있었다. 급한 조금 무리한 수정이었기 때문에, 다음번은, PlayFramework의 play-json의 연습을 겸해, 좀 더 정중한 재작업에 임해 보고 싶다.
Reference
이 문제에 관하여(Play 2.5에 입문 ⑦ httpie를 사용하면서 Play'R의 예제를 수정), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/e-a-st/items/e6ea58f5fc23c8f5791a
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
먼저 Person 재 작성 (PUT)에 대한 방법을 수정합니다.
controller/PersonController.scala
def write(person: Person) = Action { request =>
request.body.asText match {
case Some(name) if (name.length > 0) => Ok(personContainer.update(person.copy(name=name)).name)
case _ => BadRequest("Invalid name")
}
}
지난번 같이, httpie를 사용해 PUT의 거동을 봐 두자.
PUT 메소드에서 Jane이 JIRO로 바뀌지 않는 것이 문제.
이것은, 메소드중에서의 AnyContentAsJson 클래스 의 취급이 부적절한 것에 의한다.
무슨 일이 일어나고 있는지 print 문 디버그로 시도해 봅시다.
controller/PersonController.scala
def write(person: Person) = Action { request =>
println("!!!!!!!!!AnyContentAsJsonの挙動だよ!!!!!!!!!")
println("request.body ="+request.body)
println("request.body.asJson ="+request.body.asJson)
println("request.body.asText ="+request.body.asText)
println("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!")
request.body.asText match {
case Some(name) if (name.length > 0) => Ok(personContainer.update(person.copy(name=name)).name)
case _ => BadRequest("Invalid name")
}
}
play 측의 로그를 보면 request.body.asText의 변환이 무의미하다는 것을 알 수 있습니다.
따라서 다음과 같이 asJson을 사용하는 형식으로 다시 작성해 보겠습니다.
controller/PersonController 개.scala
//jsonの扱いに必要なライブラリをインポートしておく
import play.api.libs.json._
import play.api.libs.functional.syntax._
...
def write(person: Person) = Action { request =>
request.body.asJson match {
case Some(jsObj) =>
val name = (jsObj \\ "name").head.toString
Ok(personContainer.update(person.copy(name=name)).name)
case _ => BadRequest("Invalid name")
}
}
작동했다.
POST 메소드 재작성
마찬가지로, 신규 등록에 관한 create 메소드를 재작성해 둔다(원 코드는 생략).
controller/PersonController 개.scala def create = Action { request =>
request.body.asJson match {
case Some(jsObj) =>
val name = (jsObj \\ "name").head.toString
Created(personContainer.add(name).name)
case _ => BadRequest("Invalid name")
}
}
... ID가 하나 날아 6번이 되어 버렸지만, 동작했다.
감상과 다음의 대처
Httpie(혹은 curl)과 play의 동적 컴파일 기능을 조합하는 것으로, 예제를 용이하게 수정할 수 있었다. 급한 조금 무리한 수정이었기 때문에, 다음번은, PlayFramework의 play-json의 연습을 겸해, 좀 더 정중한 재작업에 임해 보고 싶다.
Reference
이 문제에 관하여(Play 2.5에 입문 ⑦ httpie를 사용하면서 Play'R의 예제를 수정), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/e-a-st/items/e6ea58f5fc23c8f5791a
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
def create = Action { request =>
request.body.asJson match {
case Some(jsObj) =>
val name = (jsObj \\ "name").head.toString
Created(personContainer.add(name).name)
case _ => BadRequest("Invalid name")
}
}
Httpie(혹은 curl)과 play의 동적 컴파일 기능을 조합하는 것으로, 예제를 용이하게 수정할 수 있었다. 급한 조금 무리한 수정이었기 때문에, 다음번은, PlayFramework의 play-json의 연습을 겸해, 좀 더 정중한 재작업에 임해 보고 싶다.
Reference
이 문제에 관하여(Play 2.5에 입문 ⑦ httpie를 사용하면서 Play'R의 예제를 수정), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/e-a-st/items/e6ea58f5fc23c8f5791a텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)