Outsider's Dev Story

Stay Hungry. Stay Foolish. Don't Be Satisfied.
RetroTech 팟캐스트 44BITS 팟캐스트

Play framework에서 Scala사용할때obj.isPartialObject=false로 302 Redirect가 발생하는 문제

Play Framework에서 개발하던 중에 특정 URL을 호출했을 경우 해당 URL의 페이지나 오류메시지가 나오는 것이 아닌 302가 리턴되면서 다른 URL로 리다이렉트가 발생하는 문제가 발생했습니다.

Firebug의 HTTP호출이 302로 리턴된 화면

위처럼 URL로 접속해서 사실은 index를 호출한 것이지만 예상과 다르게 302가 리턴되면서 알수 없는 URL로 리다이렉트가 되었습니다.

웹브라우저에 리다이렉트되어 객체가 화면에 출력된 화면

제 경우에는 /application/converters?obj.isPartialObject=false로 리다이렉트가 되었으며 화면에는 객체가 그대로 출력되었습니다.


이 문제는 Controller에서 Scala의 Implicit 타입컨버전을 사용했기 때문입니다.


object Application extends Controller {
    implicit def converters(obj:DBObject) = new TweetPost(obj)

    def index {
        // .....
    }
}

위 코드를 보시면 알겠지만 리다이렉트 된 URL은 Implicit타입컨버전의 함수명임을 알 수 있습니다. 이 Implicit 타입컨버전을 내부에서 사용하지 않은 컨트롤러에서는 괜찮지만 사용한 컨트롤러에서는 위와같이 작성할경우 타입컨버전의 함수명으로 리다이렉트 되어버립니다.



object Application extends Controller {
    def index {
        implicit def converters(obj:DBObject) = new TweetPost(obj)
        // .....
    }
}


이 문제를 해결하려면 위처럼 Implicit 타입컨버전을 각 컨트롤러 함수내에서 정의해서 사용하면 됩니다.
2010/09/27 03:43 2010/09/27 03:43