2016-02-18 1 views
0

Я пытаюсь вернуть данные ответа json из базы данных Postgresql, используя платформу Play (Scala). Я пробовал следующее: но я не могу вернуть свой ответ json response. (Поскольку у меня есть пара json-объектов в моей таблице базы данных: jsondata, которая имеет идентификатор и имя). Я получаю: «type mismatch; found : anorm.SqlQuery required: String». Я не уверен, где я ошибаюсь в своем коде, чтобы получить ответ json для моих json-объектов из базы данных (контроллер и модель). Пожалуйста, помогите мне в этом, чтобы получить результат и заблаговременно.Как получить выход ответа json с помощью Play Framework (Scala) для объектов json из таблицы Postgresql?

контроллер:

import play.api.Play.current 
import play.mvc.Controller;   
import play.libs.Json; 
import play.libs.Json.*;       
import com.fasterxml.jackson.databind.JsonNode; 
import org.codehaus.jackson.JsonNode;   
import models.Getjsondata 
import com.google.gson.Gson 
import scala.util.{Try, Success, Failure} 

Getjsondata.getJsonValues(Getjsondata(Json.parse(id)), Json.parse(name)); 
class MyController extends Controller { 
def getJson = Action { request => 
    println("calling getJson ... !!")//getting this message on play console 
    val body: Anyname = request.body 
    val textBody: Option[String] = body.asText 
    val optionJson = textBody.flatMap(json => Try(Json.parse(json)).toOption) 
    val bodyId = optionJson.map(_ \ "id") 
    val bodyname = optionJson.map(_ \ "name") 
    { 
     for { 
     id <- bodyId 
     name <- bodyname 
     json <- optionJson 
     } yield { 
     println("calling getJson else ... !!") 
     val response = Getjsondata.getJsonValues(Getjsondata(id.as[Long],name.as[String])); 
     Ok("Json data retrieved successfully: "+response) 
     } 
    } getOrElse BadRequest("Missing parameter either [id] or [name]") 
    } 
    } 

модель:

import anorm._ 
import anorm.SqlParser._ 
import play.api.db._ 
import play.api.Play.current 
import play.api.libs.json.{Json,JsValue} 
import play.api.db.DB 
import play.api.libs.json._ 
import anorm.~ 
import play.api.libs.functional.syntax._ 

case class Getjsondata (
    id: Pk[Long], name: String 
) 
object Getjsondata { 
    val extractor = { 
    get[Pk[Long]]("jsondata.id") ~ 
    get[String]("jsondata.name") map { 
     case id~name => Getjsondata(id, name) 
} 
} 
    def getJsonValues(jsondata: Getjsondata): String = { 
    println("addJson getJsonValues page... !") 
    DB.withConnection { implicit connection => 
// SQL("select row_to_json(jsondata) from jsondata"); 
    SQL("select * from jsondata");//type mismatch; found : anorm.SqlQuery required: String 
    } 
    println("Test String... !") 
    } 
} 
+1

Вы смешивания Scala и Java-код. Может быть, попробуй со всей Скалой. – Reactormonk

+0

@Reactormonk, спасибо за ваш ответ. Могу ли я узнать, как я могу использовать/написать класс контроллера в Scala? – Dhana

+0

Возможно, вы можете взглянуть на документ и попробовать? – cchantep

ответ

0

ваш Scala controller может выглядеть следующим образом:

class MyController extends Controller { 

    def getJson = Action { request => 
    println("calling getJson ... !!") 

    val body: AnyContent = request.body 
    val textBody: Option[String] = body.asText 
    val optionJson = textBody.flatMap(json => Try(Json.parse(json)).toOption) 

    val bodyId = optionJson.map(_ \ "id") 
    val bodyName = optionJson.map(_ \ "name") 

    { 
     for { 
     id <- bodyId 
     name <- bodyName 
     json <- optionJson 
     } yield { 
     println("calling getJson else ... !!") 
     Getjsondata.getJsonValues(json) 

     Ok("Json data retrieved successfully") 
     } 
    } getOrElse BadRequest("Missing parameter either [id] or [name]") 
    } 
} 
+0

спасибо за ваш ответ, если я применил вышеуказанный код, я получаю сообщение об ошибке: type mismatch; найдено: play.api.libs.json.JsValue требуется: models.Getjsondata (по строке: Getjsondata.getJsonValues ​​(json)). – Dhana

+0

Да, ваш метод 'Getjsondata.getJsonValues ​​(json)' принимает входное значение типа 'Getjsondata'. ваш код в этой строке должен выглядеть примерно так: Getjsondata.getJsonValues ​​(Getjsondata (myId, myName)), хотя я не уверен, что такое 'Pk [Long]'. что такое ПК? (как только вы скажете мне, что я могу показать вам, что нужно изменить, чтобы этот код работал и имел смысл). – Dannyvas

+0

У меня есть пара объектов json в моей базе данных Postgreql, мне нужно: мне нужно получить эти json-объекты (ответный результат) из таблицы базы данных Postgresql (jsondata, которая имеет идентификатор, первичный ключ (PK) длинного типа и имя типа String) с помощью Scala. так что я могу отображать на моей странице просмотра в любом формате таблицы. – Dhana

Смежные вопросы