具有前端和静态功能的Spring Boot应用程序

时间:2018-09-13 16:20:00

标签: java spring spring-boot spring-web

我正计划使用Spring Boot作为静态服务来构建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";
    }
}

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

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

感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

惯用的方式是依靠Accept请求标头。 如果请求者出示Accept: application/json,则向他返回JSON数据(REST API)。

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

在实现方面,应该将@RequestMappingconsumes参数一起使用。您需要两种方法。如果两条路径的业务逻辑相同,则可以重复使用。业务逻辑应驻留在另一种方法中或单独的@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
    }

}

答案 1 :(得分:1)

我建议创建两个控制器类,第二个使用@RestController。然后,有两条路;第二个可能是“ rs / greeting”。该方法将Web和RESTful的关注点分离开来,它具有更大的可扩展性,并且不需要大多数客户不希望处理的任何奇怪的标头。

相关问题