2014-10-20 66 views
0

編輯 -從MVC控制器調用REST API(Spring MVC)

這是一個愚蠢的問題 - 請忽略它。走開去正確學習Java。

-

我想創建一個可以在外部使用的API,但我也想創建自己的前端相同的API。

如果我在同一個應用程序中創建一個REST控制器的MVC控制器&,我可以從MVC控制器調用REST API而不進行「外部」http調用,這看起來有點浪費? (編輯 - 最初連接到另一個問題,但它是錯誤的,找不到正確的一個如此刪除)。

顯然提出了我是否應該這樣做的進一步的問題,但我認爲這是主觀的。除此之外,我希望對此表示歡迎。

EDIT 2(添加一些代碼響應於chrylis)

所以,如果我創建一個類這樣的(例如,從一個教程地方複製)

public class Greeting { 
    private final long id; 
    private final String content; 

    public Greeting(long id, String content) { 
     this.id = id; 
     this.content = content; 
    } 

    public long getId() { 
     return id; 
    } 

    public String getContent() { 
     return content; 
    } 
} 

和其餘控制器這樣其如果直接從瀏覽器調用將返回JSON數據:

@RestController 
public class GreetingController { 

    private static final String template = "Hello, %s!"; 
    private final AtomicLong counter = new AtomicLong(); 

    @RequestMapping("/greeting") 
    public Greeting greeting(@RequestParam(value="name", required=false, defaultValue="World") String name) { 
     return new Greeting(counter.incrementAndGet(), 
          String.format(template, name)); 
    } 

} 

然後我把它從我的HTML控制器是這樣的:

@Controller 
public class HomeController { 

    private static final Logger logger = LoggerFactory.getLogger(HomeController.class); 

    @RequestMapping("/") 
    public String home(Model model) { 

     Greeting gr=new Greeting(1,"Hi"); 
     logger.info(gr.getContent()); 

     model.addAttribute("modelName",gr.getContent()); 
     return "home"; 
    } 
} 

是你的意思嗎?它似乎工作。我看到的唯一問題是我直接在課堂上工作,而沒有執行其餘api的操作。

其實,即使在我寫這篇文章時,我意識到這不是你的意思,我不認爲。

回答

0

這實際上是我如何處理我自己的Web應用程序。對於Person資源,創建一個返回PersonResource REST表示的PersonRestController,並將PersonRestController注入到PersonHtmlController中。 HTML控制器上的處理程序方法調用REST控制器並將PersonResource(和其他相關屬性)提供給HTML模板的模型。

+0

謝謝。如果你能解釋一下,或者指給我一些有助於注射的地方,我將非常感激。我對所有這些都是陌生的,雖然我在搜索,但我不確定我是否使用了正確的術語。 此外,我一直在閱讀有關使用MockMvc進行測試,這似乎與我正在尋找的東西類似。我認爲使用測試方法並不好?只是一個想法。 – beigerac 2014-10-21 07:35:24

+0

REST api返回一個json打包的響應也可能是相關的。 – beigerac 2014-10-21 07:37:45

+0

@beigerac Spring MVC'@ RestController's返回POJO,你可以像注入其他Spring bean一樣注入控制器和調用方法。 – chrylis 2014-10-21 08:21:23