Как выбрать несколько столбцов из базы данных с помощью Scala Play2.6 и с правильным заголовком ответа json

У меня есть одна таблица Таблица сведений о пользователе, и она содержит столбцы ниже

User_ID, имя, электронная почта, Mobile_no, имя, фамилия, адрес

Я хочу выбрать эти 4 столбца (User_ID, Name, email, Mobile_no) данных, идентификатор пользователя которых равен 1, и я хочу, чтобы ответ был в правильном формате JSON.

Как это сделать в Scala Play 2.6 с Slick До сих пор я делал это

import play.api.mvc._
//import slick.driver.H2Driver.api._
import slick.jdbc.H2Profile.api._
import Services.HorseImageServices
import scala.concurrent.{Await, Future}
import scala.concurrent.duration._
import com.google.gson.Gson

case class userss(User_ID:String,Name:String,email:String,Mobile_no:String)
class Testing @Inject()(cc: ControllerComponents) extends AbstractController(cc){


  def getPasswqord(username :String) = Action{
    import play.api.libs.json.{JsPath, JsValue, Json, Writes}
    val dbConfig = Database.forURL("jdbc:mysql://localhost:3306/equineapp?user=root&password=123456", driver = "com.mysql.jdbc.Driver")
    val a1=(sql"""select User_ID,Name,email,Mobile_no from equineapp.user_details_table where email=$username or Mobile_no=$username """.as[(String,String,String,String)]     )
    val res = Await.result(dbConfig.run(a1), 1000 seconds)

    val gson: Gson = new GsonBuilder().setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE).create

    //   val json = Json.toJson(res)
    //select User_ID,Name,email,Mobile_no from equineapp.user_details_table where email='' or Mobile_no=''
   // val writes : Writes[(String, String,String,String)] = (JsPath \ "password").write[String] and (JsPath \ "password").write[String]
    import play.api.libs.json._
    import play.api.libs.functional.syntax._

    implicit val locationWrites: Writes[(userss)] = (
      (JsPath \ "userid").write[String] and
        (JsPath \ "Name").write[String] and
        (JsPath \ "Email").write[String] and
        (JsPath \ "Mobile").write[String]
      )(unlift(userss.unapply))
    def toJson[T](sequence: Seq[T])(implicit writes: Writes[T]): JsValue = {
      Json.toJson(sequence)
    }

    implicit val residentWrites = Json.writes[(String,String,String,String)]
    Ok(toJson(res)(residentWrites))

   // Ok(Json.toJson(res.map(gson.toJson).map(Json.parse)))

  }

}

от этого я получаю ответ в формате

[{"_1": "86", "_ 2": "Abhinay", "_ 3": "[email protected]", "_ 4": "9739239812"}]

Ожидаемый выходной формат

[{"userid": "86", "Name": "Abhinay", "Email": "[email protected]", "Mobile": "9739239812"}]

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
78
2

Ответы 2

Вы используете неправильный пользовательский писатель.

Вам нужно использовать расположениеПисатели вместо резидент

Ваше решение: Ok(toJson(res)(locationWrites))

если я использую Ok (toJson (res) (locationWrites)), то я получаю "несоответствие типа исключения"; найдено: play.api.libs.json.Writes [controllers.userss] Требуется: play.api.libs.json.Writes [(Строка, Строка, Строка, Строка)] "

Abhinay 17.09.2018 12:09

Попробуйте val a1=(sql"""select User_ID,Name,email,Mobile_no from equineapp.user_details_table where email=$username or Mobile_no=$username """.as[userss])

Tarang Bhalodia 17.09.2018 14:44

нет, это не сработало как исключение "не удалось найти неявное значение для параметра rconv: slick.jdbc.GetResult [controllers.userss]"

Abhinay 17.09.2018 17:52

Предположим, у вас есть класс case:

case class User(userId: String, name: String, email: String, mobilePhone: String)

Чтобы иметь возможность преобразовать результат sql"""select User_ID,Name,email,Mobile_no from equineapp.user_details_table where email=$username or Mobile_no=$username """ в User, вам необходимо определить неявный GetResult:

implicit val getUserResult = GetResult(r => User(r.nextString, r.nextString, r.nextString, r.nextString))

Принесите этот getUserResult в область, где вы вызываете базу данных и преобразуете результат запроса в класс случая sql"""your sql query""".as[User]

Чтобы иметь возможность преобразовать экземпляр User в json, определите Сопутствующий объект с настраиваемым Writes[(User)]:

object User {
  implicit val jsonWrites: Writes[(User)] = (
      (JsPath \ "userid").write[String] and
        (JsPath \ "Name").write[String] and
        (JsPath \ "Email").write[String] and
        (JsPath \ "Mobile").write[String]
      )(unlift(User.unapply))
}

Теперь вы можете преобразовать результат в json в контроллере таким образом (записи Json будут найдены автоматически, потому что они определены в сопутствующем объекте):

Ok(toJson(res))

Другие вопросы по теме