내가 두 가지 일을 Scalatra와 작은 서비스를 썼다 어떻게 든 차단 -json, Excel - with apache스칼라 암시 적 변환은
기본적으로 ScalatraServlet 구현에 두 가지 방법을 썼습니다.
def serveJson[T: JsonWriter](data: T) = {
contentType = "text/json"
data.toJson.prettyPrint
}
def serveExcel[T: ExcelWriter](data: T) = {
contentType = "application/excel"
data.toExcel.getBytes
}
여기서 toJson은 spray-json으로 구현되므로 JsonWriter 암시 적 변환 만 제공합니다. 그래서 비슷한 Excel 변환을 작성하기로했습니다.
// ExcelWriter.scala
package com.example.app.excel
import org.apache.poi.hssf.usermodel.HSSFWorkbook
import annotation.implicitNotFound
@implicitNotFound(msg = "Cannot find ExcelWriter type class for ${T}")
trait ExcelWriter[T] {
def write(obj: T): HSSFWorkbook
}
object ExcelWriter {
implicit def func2Writer[T](f: T => HSSFWorkbook): ExcelWriter[T] = new ExcelWriter[T] {
def write(obj: T) = f(obj)
}
}
// Imports.scala
package com.example.app.excel
import org.apache.poi.hssf.usermodel.HSSFWorkbook
object Imports {
type ExcelWriter[T] = com.example.app.excel.ExcelWriter[T]
implicit def pimpAny[T](any: T) = new AnyExcelPimp(any)
private[excel] class AnyExcelPimp[T](any: T) {
def toExcel(implicit writer: ExcelWriter[T]): HSSFWorkbook = writer.write(any)
}
}
이제 문제가 : 나는 import excel.Imports._
을 가져 오는 경우
그때, import excel.Imports._
import cc.spray.json._
가져 오는 경우 scalac가 serveJson
에 오류가 발생
(값 toJson하는 형식 매개 변수 T의 멤버가 아닌) , import cc.spray.json._
인 경우 scalac은 serveExcel
에 유사한 오류를 발생시킵니다 (값 toExcel은 매개 변수 T 유형의 값이 아님)
Surprisingl y, 수입품 중 하나만 사용하면 모든 것이 컴파일되고 잘 작동합니다 (절반은 주석으로 처리 했으므로 삭제 된 가져 오기를 사용합니다).
구현 방법에 문제가 있습니까?
링크 내가 참조로 사용 소스 - JSON 분무 : https://github.com/spray/spray-json/tree/master/src/main/scala/cc/spray/json
스칼라 버전 - 2.9.2 문제가 나는 것과 같은 암시 적 변환에 같은 이름을 사용하는 것 같다