2013-02-20 3 views
0

스프링 MVC를 기반으로하는 REST 서비스가있다.스프링 MVC 요청 매핑이 전달 중임

이 내 코드입니다 :

public class SitesController { 

@RequestMapping(value="/rest/sites/{id}", method=RequestMethod.GET) 
@ResponseBody 
public SiteDTO getSite(@PathVariable String id) { 
    Integer siteId = Integer.parseInt(id); 

    Site site = cms.getSite(siteId); 
    SiteDTO siteResult = new SiteDTO(site); 
    return siteResult; 
} 

@RequestMapping(value="/rest/sites", method=RequestMethod.GET) 
public SitesResult getSites(@RequestParam Integer companyId) { 
    Collection<Site> sites = cms.getSites(cms.getCompany(companyId)); 
    SitesResult sitesResult = new SitesResult(sites); 
    return sitesResult; 
} 

} 

(I 문제에 적용되지 않는 몇 가지 코드를 생략) 나는 그것이 내가 기대하는 데이터를 반환하는 URL /rest/sites/1에 갈 때, 그러나 내가 /rest/sites?companyId=1에 갈 때 나는 404 페이지를 얻는다 : HTTP Status 404 - /rest/rest/sites.

로그는 getSites 기능의 코드가 실행되는 것을 보여주고 있지만, 그 후 로그는 다음 보여주고있다 : org.springframework.web.servlet.view.JstlView Forwarding to resource [rest/sites] in InternalResourceView 'rest/sites'

은 왜 재 대신 실행?

UPDATE 문제를 발견. 내 방법 위에 @ResponseBody이 없기 때문에 발송자가 내 요청을 전달했습니다. 이한다면 나도 몰라

public SitesResult getSites(@RequestParam("companyId") Integer companyId) { 

더 자세한 정보 here, 키 것은으로

방법 getSites 선언 할 수있다 ... 이것은 내 부분에 그냥 추측 If the method is annotated with @ResponseBody, the return type is written to the response HTTP body. The return value will be converted to the declared method argument type using HttpMessageConverters.

+0

합니까? –

답변

1

은, 봄의 클래스 이름을 사용하여 Model에 반환 된 객체를 추가하고이 이유입니다, 귀하의 요청 매핑의 값으로 명명 된 뷰를 렌더링하려고합니다 /rest/sites을 렌더링하려고합니다. 실제로 HTTP 전달은 아니지만보기를 렌더링하기 위해 servlets이 수행하는 발송자 전달 (예 : jsp)입니다.

특정보기를 반환하려면 이름이 포함 된 String을 반환하십시오.

대신

@RequestMapping(value="/rest/sites", method=RequestMethod.GET) 
public SitesResult getSites(@RequestParam Integer companyId) { 
    Collection<Site> sites = cms.getSites(cms.getCompany(companyId)); 
    SitesResult sitesResult = new SitesResult(sites); 
    return sitesResult; 
} 

는이`SitesResult` 개체의 어떤 종류의

@RequestMapping(value="/rest/sites", method=RequestMethod.GET) 
public String getSites(@RequestParam Integer companyId, Model model) { 
    Collection<Site> sites = cms.getSites(cms.getCompany(companyId)); 
    SitesResult sitesResult = new SitesResult(sites); 
    model.addAttribute("sitesResult", sitesResult); 
    String myView = "myView"; 
    return myView; 
} 
+0

감사합니다. 내 문제와 해결책을 찾았습니다. '지원되는 반환 유형'에 대해 이야기 할 때 나에게 아이디어를주었습니다. 내 메소드 위에'@ ResponseBody' 주석을 놓쳤습니다. 이게 내 문제를 해결했다. –

0

했다 어떤 효과가 있니?

또는 지정된 논리보기 이름이보기에 매핑되지 않았습니까? 당신의 방법을 반환 유형 SitesResult이 아닌 하나 supported return types의 때문에

관련 문제