spring 具有前端和 restful 的引导应用程序

spring boot application with both front end and restful

我正计划使用 Spring 作为 restful 服务启动来构建 Web 应用程序。 我的 spring boot web restful 应用程序也应该可以被其他应用程序访问。如果有人从其他应用程序访问其余服务,那么我的应用程序应该按预期工作。

@Controller
public class GreetingController {
    @RequestMapping("/greeting")
    public String greeting(@RequestParam(value="name", required=false,  defaultValue="World") String name, Model model) {
        model.addAttribute("name", name);
        return "greeting";
    }
}

在上面的示例中,如果调用是从应用程序外部进行的,则其余服务应该 return JSON 输出。

一种方法是我们可以将一些变量区分为请求变量。但我不想那样。请分享一些标准方法。

感谢您的帮助。

惯用的方式是依赖Accept请求header。 如果请求者提供 Accept: application/json 那么 return 他 JSON 数据(REST API)。

如果请求者向您提供 Accept: application/xhtml+xml return 他 HTML (网络前端)。

Implementation-wise 你应该完成使用 @RequestMappingconsumes 参数。你需要两种方法。如果两条路径的业务逻辑相同,则可以重用 in。业务逻辑应该驻留在另一个方法或单独的 @Service 中。业务逻辑本身不应知道、关心或依赖传输协议 (HTTP)、请求响应或表示的序列化。业务逻辑应该只与 POJO 一起工作,并将序列化留给@Controller。

@Controller
@RequestMapping("/greeting")
public class GreetingController {

    @RequestMapping(consumes="application/json")
    @ResponseBody  //required if you want to return POJO (spring will serialize it to response body)
    public void rest() {
       //return POJO, it will be serialized to JSON. or serialize pojo 
       directly and return response with manually set body and headers.
    }

    @RequestMapping(consumes="application/xhtml+xml")
    public void html() {
            //populate model, return string pointing to HTML to View
    }

}

我建议创建两个控制器 类,第二个使用 @RestController。那么,有两条路;第二个可能是 "rs/greeting"。这种将 Web 和 RESTful 问题分开的方法更易于扩展,并且不需要任何大多数客户不想处理的奇怪 headers。