当我尝试发送访问handleFileUpload( )
方法的请求时出现404错误
但是,如果我将handleFileUpload( )
置于DetailsController.java
内,那么事情就会奏效。这是为什么?我正在使用Spring启动。
我有两个控制器类。
我没有ServletInitializer.java
com.amazon.s3
| __ AmazonS3Controller.java
com.myproject
| __ DetailsController.java
这就是我的@SpringBootApplication类的样子
@SpringBootApplication //This annotation means, it is the starting point of the app.
public class QqdApplication extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(QqdApplication.class, args);
}
DetailsController.java
@RestController
@Component
public class DetailsController {
@Autowired
private DetailsService detailsService;
@RequestMapping("/contactUs")
public ModelAndView contactUs(){
ModelAndView mav = new ModelAndView();
mav.setViewName("contactUs");
return mav;
}
}
AmazonS3Controller.java
package com.amazon.s3;
import com.amazon.s3.AmazonS3Template;
import com.amazonaws.services.s3.model.*;
import java.util.List;
import java.util.stream.Collectors;
import javax.servlet.annotation.MultipartConfig;
@RestController
@RequestMapping("/s")
public class AmazonS3Controller {
private AmazonS3Template amazonS3Template;
private String bucketName;
@Autowired
public AmazonS3Controller(AmazonS3Template amazonS3Template, @Value("${amazon.s3.default-bucket}") String bucketName) {
this.amazonS3Template = amazonS3Template;
this.bucketName = bucketName;
}
@PostMapping(value = "upload", headers = "Accept=*/*")
@ResponseBody
public String handleFileUpload() {
JSONObject result = new JSONObject();
try {
// System.out.println("we ar ehere" + file.getName() + " " + file.getContentType() + " " + file.getSize());
result.put("link", "https://static.swappa.com/static/icons/stars/star-on-small-green.png");
System.out.println("imgae returned");
} catch (JSONException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
return new JSONArray().put(result).toString();
}
}
我的application.properties
看起来像
spring.mvc.view.prefix: /WEB-INF/jsp/
spring.mvc.view.suffix: .jsp
#AWS details
amazon.s3.default-bucket=<someVal>
#Database
spring.datasource.....=....
#Hibernate
entitymanager.packagesToScan:com
spring.jpa.....=....
PS:好的,将com.amazon.s3重命名为com.myproject.s3之后,一切正常。但是,我仍然不明白为什么它之前没有工作以及为什么它现在正在工作。
P.S.S:我在这里输入以上三行而不是评论,因为SOF继续告诉我代码太多,文字少。对不起,我不能在这里写故事。我觉得我给了足够的细节。谢谢。
答案 0 :(得分:0)
注释@SpringBootApplication
包括@ComponentScan
:
默认情况下,@SpringBootApplication注释等同于使用 @Configuration,@ EnableAutoConfiguration和@ComponentScan与他们的 默认属性:
@ComponentScan
将从注释所在的类的包中扫描注释(即QqdApplication
的包<)
如果未定义特定包,则会从中进行扫描 声明此批注的类的包。
因此,当放置在包@PostMapping
中的控制器中时,未捕获com.amazon.s3 to com.myproject.s3
注释。您必须将软件包更改为扫描位置,或者您必须在@ComponentScan
注释中指定要扫描的软件包。