2014-10-23 3 views
0

저는 프로젝트에서 간단한 설치가 잘못되었다고 확신합니다.하지만 확실한 도움을 얻을 수 있습니다!Grails 2.x REST Controller - '실제'프로젝트가 아닌 빈 프로젝트에서 작동합니다.

나는 최신 GGTS와 Grails 2.4.3을 가지고있다. 나는 우리 둘이 작업하고있는 프로젝트에서 REST 컨트롤러를 만들려고했다. 이것이 나에게 새로운 것이기 때문에 그것이 작동하지 않을 때, 나는 그것이 얼마나 단순한지를 보여준 기사를 발견했다. 그것은 새 프로젝트에서 정확하게 따라 갔다. 모든 것이 제대로 작동하고 광고했습니다! grails 명령을 사용하여 프로젝트, 도메인 클래스, 컨트롤러를 생성했습니다.

나는 원래 프로젝트로 돌아가서 이미 존재하는 프로젝트를 만드는 것을 제외하고는 동일한 단계를 수행했지만 grails 명령을 통해 만들었습니다. 작동 대신 GET을 통해 나머지 URL을 누를 때 HTTP 404 상태와 'index.gsp'를 찾을 수 없다는 메시지를 반환합니다. 물론 index.gsp가 존재하지 않습니다. 그러나 요청한대로 json을 반환해야합니다. 내 질문은 왜?

나는 (지금) REST 호출을 작동 시키려고하기 때문에 Domain 클래스는 3 개의 String 필드이다. 다른 관계는 없습니다. 컨트롤러는 RestfulController를 확장합니다. 고정 된 비계 또는 그와 같은 것이 없습니다. ...

각 프로젝트에서 동일한 내용은 무엇입니까?

대부분의 설정은 원본이며 변경되지 않았습니다. 두 URL 매핑 파일은 동일합니다. 두 Config.groovy 파일은 동일합니다.

두 프로젝트의 차이점은 무엇입니까?

가장 큰 차이점은 REST가 아닌 컨트롤러가 3 개 (살) 있다는 것입니다. 이것은 내가 보는 가장 큰 차이점이다. 컨트롤러 (REST와 nonRest)를 '믹싱 할'때 또는 무언가를 평화롭게 공존시킬 때 뭔가를 구성해야하는 문제가 있습니까?

다른 점은 AngularJS와 Bootstrap이있는 기존 프로젝트 (작동하지 않는 프로젝트)뿐입니다. 그 밖의 어떤 것도 추가되지 않았습니다.

감사합니다.

피투성이 세부 사항

엔드 포인트 공격하는 데 사용되는 컬 명령

curl -H "Accept: application/json" http://localhost:8080/myproject/example 

응답 :

<html><head><title>Apache Tomcat/7.0.55 - Error report</title><style><!--H1 
[deleted font family lines...] 
{color : black;}A.name {color : black;}HR {color : #525D76;}--></style> 
</head><body><h1>HTTP Status 404 - &quot;/WEB-INF/grails-app/views/example/index.gsp&quot; not found.</h1> 
<HR size="1" noshade="noshade"><p><b>type</b> Status report</p><p><b>message</b> 
<u>&quot;/WEB-INF/grails-app/views/example/index.gsp&quot; not found.</u></p><p> 
<b>description</b> <u>The requested resource is not available.</u></p> 
<HR size="1" noshade="noshade"><h3>ApacheTomcat/7.0.55</h3></body></html> 

도메인 클래스 :

package com.mycompany.rest 

import groovy.transform.EqualsAndHashCode; 
import groovy.transform.ToString; 

@ToString(includeNames = true, includeFields = true, excludes = 'dateCreated, lastUpdated') 
@EqualsAndHashCode 
class Example { 

    Long id 
    Long version 
    Date dateCreated 
    Date lastUpdated 

    String name 
    String description 


    static constraints = { 
     name blank:false, nullable:false 
     description blank:false, nullable: false 
    } 
} 
,691,363을 (210)

컨트롤러 :

내가 설명되어있는 문제의 원인이 정확히 무엇인지 알아 낸 적이 있지만
package com.mycompany.rest 

import grails.rest.RestfulController; 

class ExampleController extends RestfulController<Example> { 

    static responseFormats = ['json', 'xml'] 

    ExampleController() { 
      super(Example) 
    } 


} 
+0

모든 것이 제대로 작동해야하지만 그렇지 않은 경우, 특히 작은 효과를 가져야하는 변경 작업을 수행하면 이상하게 작동하는 것으로 끝나면 'grails clean'을 실행하고 'grails compile'을 실행 한 다음 다시 시도하십시오. 또한'rm -rf target'을 사용하여 설치된 플러그인과 모든 컴파일 된 코드를 지우고'grails compile' 명령으로 전체 패키지를 강제로 삭제할 수 있습니다. 때로는 동적 코드가 동기화되지 않고 깨끗하게 다시 작성해야합니다. –

+0

또한 관련이 없으므로 Grails 컴파일러에서 추가 된 'Long ID'와 'Long version'은 생략해야합니다. 거기에 아무런 해를 끼치 지 않지만 혼란 스럽습니다. 또한'nullable : false'가 모든 프로퍼티의 기본값이므로, 그럴 필요가 없습니다. 그리고 Grails 2.4는 데이터 바인딩 중에 공백 문자열을 null로 대체하기 때문에'blank : false'도 역시 삭제할 수 있습니다. 그리고 그 세미콜론을 잃어라 :) –

+0

''id','version','lastUpdated', 또는'dateCreated'가'hashCode' 또는'equals' 계산을 고려하지 않기를 바랍니다 - 저는 같은 두 인스턴스를 추측하고 있습니다 'name'과'description'은 'equal'(또는 같은'name '을 가진 2 개)으로 간주 될 것이지만 다른 4 개의 소품의 차이가있을 수 있으며'hashCode' /'equals'를 전혀 계산하지 않아도됩니다 –

답변

0

, 그것은 분명 어디 선가 원래 프로젝트에서했던 이상한 일이었다!

세 번째 새로운 빈 프로젝트를 만들어서이 문제를 해결했습니다. 위에서 설명한대로 휴식 서비스를 추가하고 정상적으로 작동하는지 확인했습니다. 그때까지 작업은 여전히 ​​크지 않았기 때문에 각 컨트롤러/도메인 개체 /보기/등을 새 프로젝트에 복사했습니다. 이제 모든 것이 작동합니다.내가 아는 이슈를 해결할 수있는 멍청한 방법의 종류. 그러나 어쨌든 어떻게 든 첫 번째 프로젝트를 어쨌든 매우 희박한 상태로 만들었다 고 생각하기 때문에, 나는 다시 기능적으로 기쁘다!

기타 의견을 주신 Burt에게 감사의 말을 전합니다.