2014-11-26 14 views
0

명령 객체와 데이터 바인딩에 관한 문서에 따르면. 일단 params 객체를 읽으면, 그 객체는 결코 다시 재사용 될 수 없습니다. 문서에서Grails : 닦아내지 않고 요청 매개 변수에 액세스하기

: 명령에 요청 바디 바인딩

는 요청의 본문은 그 일을하게 해석되는 것을 http://grails.org/doc/2.3.x/guide/theWebLayer.html#commandObjects

참고 개체. 그 이후에 요청 본문을 읽으려는 시도는 해당 입력 스트림이 비어 있기 때문에 실패합니다. 컨트롤러 동작은 명령 객체를 사용할 수도 있고 요청의 본문을 직접 (request.JSON과 같은 것을 참조하여) 파싱 할 수도 있지만 둘 다 수행 할 수는 없습니다.

필터 (컨트롤러가 요청되기 전에 치는) 내에서 매개 변수를 보려고합니다. 로그에 매개 변수를 로깅하면 컨트롤러가 null 매개 변수 개체를 가져 오게됩니까? 해당되는 것으로 보이는 문서에서. 그러나 필터에서 필터를 지우지 않고 매개 변수에 액세스하려면 어떻게해야합니까?

+0

요청 본문을 요청 매개 변수와 혼동시킬 수 있습니다. 본문은'InputStream'이므로 한번 읽으면 스트림의 끝에 있으므로 다시 읽을 수 없습니다. 요청 매개 변수는 이해할 수있는만큼 반복적으로 액세스 할 수 있습니다. –

답변

2

params 개체를 읽은 후에는 해당 개체를 절대로 다시 사용할 수 없습니다. .

정확하지 않습니다. 요청 매개 변수를 반복해서 읽을 수 있습니다. 반복해서 읽을 수없는 것은 요청의 본문입니다. 본문과 요청 매개 변수는 서로 다른 두 가지입니다.

+0

귀하의 질문은 실제로 이것을 나타내지는 않지만 실제로 원하는 것은 필터에서 요청의 본문을 읽는 것입니다. 그렇게 할 수 있고 결과로 원하는 것을 할 수는 있지만 그렇게 할 수는 없습니다. 나중에 시체를 다시 읽으십시오. 필터에서 본문을 읽고 나중에 해당 정보에 액세스하려는 경우 필터는 해당 데이터를 params 맵에 저장하거나 세션이나 상태 저장 빈 등에 저장할 수 있습니다. 옵션의)하지만, 그것이 정말로 당신이 어쨌든 무엇을하려고하는지 명확하지 않습니다. –

+0

필터를 확인한 후 컨트롤러에 부정적인 영향을주지 않고 필터의 params 객체를보고 재사용 할 수 있습니까? 나는 당신이 HTTP.get 메타 클래스 문제에 대한 나의 질문에 대답했다고 믿는다. 나는 아직도 그것에 표를 게시 할 필요가있다. – monksy

+0

"확인하기 만하면 컨트롤러에 부정적인 영향을 미치지 않고 필터의 params 객체를보고 재사용 할 수 있습니까?" - 맞아요. 'params'에서 값을 반복해서 가져올 수 있습니다. –

관련 문제