2012-08-23 3 views
2

매우 영리한 스칼라 사람 중 한 명이 다음과 같은 문제를 설명 할 수 있다고 생각했습니다.스칼라를 사용하는 호기심 오류 springmvc annotations

다음 서비스는 항상 400에서 반환됩니다 (클라이언트가 보낸 요청은 구문 상 올바르지 않습니다().) - springmvc의 덜 유용한 오류 중 하나이지만 일반적으로 매개 변수가 올바르게 지정되지 않은 경우 발생합니다. 그러나 None에서 매핑을 수행하는 선을 제거하면 작동합니다. 또한 param을 참조하는 로컬 val을 작성한 다음 매핑하면 대신 작동합니다. 나는 모든 사람이 발로 차고 스칼라 비명과 그것이 내가 그것에 대해 약간의 죄책감 첫 번째 경우입니다 끌고 있기 때문에

@RequestMapping(value = Array("/willfail/{param}/")) 
def willFail(@PathVariable param:String):String={ 
    println("This line never even gets executed.") 

    //Remove following line and it works. 
    None.map(_ == param) 

    //Whatever.. 
    "somepage" 
} 

그것은 조금 당황입니다.

+2

param의 정확한 이름을 지정해 주시겠습니까 -'@PathVariable ("param")' –

답변

1

정확하게 Biju Kunjummen이 지적한대로 디버그 정보에서 매개 변수 이름을 재구성하는 것과 관련이 있습니다. 어떤 이유로 None.map(_ == param)scalac의 존재에

그러므로 스프링 MVC 경로 변수로 매개 변수를 연결할 수 없습니다 (당신이 javap -c -l 그것을 확인하실 수 있습니다) 디버그 정보에 다른 매개 변수 이름 (대신 paramparam$1)를 기록합니다.

매개 변수 이름을 명시 적으로 지정하면 (@PathVariable("param")) 디버그 정보없이 컴파일해도 프로그램이 작동합니다.

+0

두 분 모두에게 감사드립니다. – Andrew