Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 弹簧靴、Thymeleaf和@Controller_Java_Spring_Spring Mvc_Spring Boot - Fatal编程技术网

Java 弹簧靴、Thymeleaf和@Controller

Java 弹簧靴、Thymeleaf和@Controller,java,spring,spring-mvc,spring-boot,Java,Spring,Spring Mvc,Spring Boot,我在玩弹簧靴,有些东西我不太明白。我的应用程序中有2个@Controllers,第二个不是真正地接收REST调用,而是Thymeleaf跳到请求上 基本上我所拥有的是: @Configuration @ComponentScan @EnableAutoConfiguration public class Application { public static void main(String[] args) throws Throwable { SpringAp

我在玩弹簧靴,有些东西我不太明白。我的应用程序中有2个
@Controller
s,第二个不是真正地接收REST调用,而是Thymeleaf跳到请求上

基本上我所拥有的是:

@Configuration
@ComponentScan
@EnableAutoConfiguration
public class Application {
     public static void main(String[] args) throws Throwable {
            SpringApplication.run(Application.class, args);
     }
}
然后

和两个控制器。这一个有效,所以它从一个简单的AngularJS客户端接收我的呼叫并响应:

@Controller
@RequestMapping("/foo")
public class MyController {

    @RequestMapping(method = RequestMethod.GET)
    @ResponseBody
    @PreAuthorize("hasRole('ROLE_FOO')")
    public String getFoo() {
        return "foooooo";
    }
}
这是生病的控制员,没有反应:

@Controller
@RequestMapping("/sick/1")
public class SickController {

    @Autowired
    SickRepository sickRepository;

    @RequestMapping(method = RequestMethod.GET)
    public Sick getSickById() {
        return sickRepository.findOne(1);
    }

}
显然,稍后我会将其更改为将ID作为路径变量从URL中提取,但为了进行调试,我回到了硬编码

在我的
/sick/1
请求到达之前,日志不会显示任何内容。在这一点上,我得到了:

org.thymeleaf.exceptions.TemplateInputException: Error resolving template "sick/1", template might not exist or might not be accessible by any of the configured Template Resolvers
    at org.thymeleaf.TemplateRepository.getTemplate(TemplateRepository.java:245)
    at org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1104)

但是为什么它会转到模板引擎而不是我的控制器?

您可能缺少
getSickById
控制器方法上的
@ResponseBody
注释


您还可以将
@Controller
注释替换为
@RestController
,Spring将
@ResponseBody
应用于该控制器中的所有控制器方法。

好的,我现在知道了。所以我的控制器方法返回了一些东西,Spring希望进一步解析为一个视图,对吗?这个注释告诉我们不要,只要返回从方法中得到的任何结果。@jabal是的,这是正确的。ResponseBy注释告诉Spring在响应中写入方法的返回值,而不是将其解析为视图。我建议阅读本文或Spring文档以了解更多详细信息。这背后有更多的逻辑。例如,当您使用ResponseBody时,返回值由Spring转换为JSON或XML,例如使用HttpMessageConverters等等。。。
@Controller
@RequestMapping("/sick/1")
public class SickController {

    @Autowired
    SickRepository sickRepository;

    @RequestMapping(method = RequestMethod.GET)
    public Sick getSickById() {
        return sickRepository.findOne(1);
    }

}
org.thymeleaf.exceptions.TemplateInputException: Error resolving template "sick/1", template might not exist or might not be accessible by any of the configured Template Resolvers
    at org.thymeleaf.TemplateRepository.getTemplate(TemplateRepository.java:245)
    at org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1104)