下面是我的Rest控制器代码:
package com.tripura.fileserver.controller;
import com.magic.fileserver.annotation.TrackTime;
import com.magic.fileserver.model.ResponseMessage;
import com.magic.fileserver.service.S3Factory;
import com.magic.fileserver.service.SequenceGeneratorService;
import com.magic.fileserver.service.StorageService;
import org.springframework.http.*;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.security.Principal;
import java.util.List;
@RestController
@RequestMapping(FileServerController.ROOT_MAPPING)
public class FileServerController {
public static final String ROOT_MAPPING = "/api/fileserver";
private final SequenceGeneratorService sequenceGeneratorService;
private final StorageService storageService;
private final S3Factory s3Factory;
public FileServerController(SequenceGeneratorService sequenceGeneratorService, StorageService storageService, S3Factory s3Factory) {
this.sequenceGeneratorService = sequenceGeneratorService;
this.storageService = storageService;
this.s3Factory = s3Factory;
}
@GetMapping(value = "/health/admin")
@PreAuthorize("hasRole('ADMIN')")
@TrackTime
public ResponseEntity<?> checkRequestAdmin() {
return new ResponseEntity<>("Hello admin", HttpStatus.OK);
}
@PostMapping(value = "/add/file", consumes = {MediaType.MULTIPART_FORM_DATA_VALUE})
@PreAuthorize("hasRole('USER') or hasRole('CONSULTANT') or hasRole('ADMIN')")
@TrackTime
private ResponseEntity<ResponseMessage<String>> uploadFile(
@RequestPart("files") List<MultipartFile> files) {
// this.storageService.storeFileOnS3Bucket(files.get(0), image, fileName,
// userName, category);
ResponseMessage<String> responseMessage = new ResponseMessage<>();
responseMessage.setMessage("File added: " + files.get(0).getOriginalFilename());
return new ResponseEntity<>(responseMessage, HttpStatus.OK);
}
问题是当我通过POSTMAN调用它时,如下所示:
curl --location --request POST 'http://localhost:8096/api/fileserver/add/file' --form 'files=@"/G:/My Drive/Money_receipt.jpg"'
我可以看到方法内部的有效文件,但所有注入的bean都是NULL Debug在错误的方法中
我的环境:Java17(zulu17.28.13-ca-jdk17.0.0-win_x64)Spring Boot: 2.6.7
我终于找到了解决办法。这是一个愚蠢的错误,因为我将API方法uploadFile的访问修饰符声明为私有,如下所示:
private ResponseEntity<ResponseMessage<String>> uploadFile
将访问修饰符更改为公共后,解决了以下问题:
public ResponseEntity<ResponseMessage<String>> uploadFile
我已经使用Spring几十年了,但以前从未遇到过这个用例。 是否有方法注入所有带特定注释的bean,例如,所有带服务的bean或所有带自定义注释的bean? 我唯一的想法是注入上下文,获取所有bean并手动过滤。如果这是唯一的方法,Spring是否公开了一种递归扫描类层次结构以查找(元)注释的方法(因为大多数Spring注释都可以用作元注释)?
问题内容: 有没有办法获取所有带有注释的Controller的列表?我想像这样使用它们: 谢谢! 问题答案: getBeansWithAnnotation() 如果您已使用控制器…对其进行注释: 然后
我知道从中调用带注释的方法,前面已经讨论过了。 但是我不明白为什么当bean被覆盖时它就不起作用了。 我有一个遗留类,我不能修改。它是一个配置,同时也是一个业务bean。这是一个简化版本: 现在,调用返回而不是。 当配置被删除并且测试上下文的配置被设置为时,一切都能正常工作(结果为)。 在测试中注册bean有什么不同?
使用Spring bean作为带有@cacheable注释的键
我有一个自定义的POJO,我正在其上使用JOOQ.fetchInto(TestClassDto.class)映射数据库记录。我的POJO中的大多数字段与数据库表的列完全相似。然而,有一些是不同的,因此,我添加了java持久性,并使用在我的POJO上显式映射这些列,如这里所述。 不幸的是,如果我在几个特定字段上使用@Column,这是行不通的。只有用列注释的字段被映射,其余字段被忽略并设置为Null
我正在研究Dispatcher Servlet代码。在这里,我发现调度程序servlet使用HandlerMap来选择请求的处理程序。此外,Request estMappingHandlerMap用作HandlerMap的实现。现在,如果考虑的bean具有@Controller或@Request estMap注释,则isHandlerMethod of Request estMappingHand