如何在Spring Boot的控制器级别设置布尔值?

huangapple go评论103阅读模式
英文:

How to set a boolean at controller level in springboot?

问题

  1. 我有一个名为WalletController的控制器类我还有另一个具有布尔属性的转换器类我在我的控制器的每个方法中将该布尔值设置为true是否有一种方法可以在控制器级别上设置该布尔值而不是在方法级别上以便该布尔值只对这个特定的控制器为true
  2. @RestController
  3. @CrossOrigin(origins = "*")
  4. @RequestMapping("/api/wallet")
  5. public class WalletController {
  6. private static final Logger logger = LoggerFactory.getLogger(WalletController.class);
  7. @Autowired
  8. private VoucherService voucherService;
  9. @Autowired
  10. MailManager mailManager;
  11. @Autowired
  12. Converter converter;
  13. // ... (其他方法的定义)
  14. @CrossOrigin(origins = "*")
  15. @RequestMapping(value = "/create", method = RequestMethod.POST)
  16. public @ResponseBody ResponseEntity saveTransaction(@RequestBody CreateTopupDTO createTopupDTO, HttpServletRequest httpServletRequest) {
  17. //converter.supports = true;
  18. System.out.println("------------------" + httpServletRequest.getRequestURI());
  19. return voucherService.createVoucher(createTopupDTO);
  20. }
  21. // ... (其他方法的定义)
  22. @CrossOrigin(origins = "*")
  23. @RequestMapping(value = "/withdraw", method = RequestMethod.POST)
  24. public @ResponseBody ResponseEntity createWithdrawRequest(@RequestBody CreateWithdrawDTO withdrawDTO, HttpServletRequest httpServletRequest) {
  25. //converter.supports = true;
  26. return voucherService.createWithdrawRequest(withdrawDTO);
  27. }
  28. // ... (其他方法的定义)
  29. // 其他方法的定义...
  30. }
英文:

I have a controller class named WalletController, I also have another converter class that have attribute boolean. I am setting that boolean to true at every method in my controller. Is there a way to set that boolean at controller level instead of method level, so that boolean would only be true for this particular controller only?

  1. @RestController
  2. @CrossOrigin(origins = "*")
  3. @RequestMapping("/api/wallet")
  4. public class WalletController {
  5. private static final Logger logger = LoggerFactory.getLogger(WalletController.class);
  6. @Autowired
  7. private VoucherService voucherService;
  8. @Autowired
  9. MailManager mailManager ;
  10. @Autowired
  11. Converter converter;
  12. @CrossOrigin(origins = "*")
  13. @RequestMapping(value = "/create", method = RequestMethod.POST)
  14. public @ResponseBody ResponseEntity saveTransaction(@RequestBody CreateTopupDTO createTopupDTO, HttpServletRequest httpServletRequest) {
  15. //converter.supports = true;
  16. System.out.println("------------------"+httpServletRequest.getRequestURI());
  17. return voucherService.createVoucher(createTopupDTO);
  18. }
  19. @CrossOrigin(origins = "*")
  20. @RequestMapping(value = "/withdraw", method = RequestMethod.POST)
  21. public @ResponseBody ResponseEntity createWithdrawRequest(@RequestBody CreateWithdrawDTO withdrawDTO, HttpServletRequest httpServletRequest) {
  22. //converter.supports = true;
  23. return voucherService.createWithdrawRequest(withdrawDTO);
  24. }
  25. @CrossOrigin(origins = "*")
  26. @RequestMapping(value = "/currency", method = RequestMethod.GET)
  27. public @ResponseBody ResponseEntity getListOfCurrencies(HttpServletRequest httpServletRequest) {
  28. //converter.supports = true;
  29. return voucherService.getListOfCurrencies();
  30. }
  31. @CrossOrigin(origins = "*")
  32. @RequestMapping(value = "/transactions", method = RequestMethod.POST)
  33. public @ResponseBody ResponseEntity getTransactions(@RequestBody TransactionInfoDTO transactionInfoDTO, HttpServletRequest httpServletRequest) {
  34. //converter.supports = true;
  35. return voucherService.getTransactions(transactionInfoDTO);
  36. }
  37. @CrossOrigin(origins = "*")
  38. @RequestMapping(value = "/transactions/properties", method = RequestMethod.GET)
  39. public @ResponseBody ResponseEntity getPropertiesTransactions( HttpServletRequest httpServletRequest) {
  40. //converter.supports = true;
  41. return voucherService.getPropertiesTransactions();
  42. }
  43. @CrossOrigin(origins = "*")
  44. @RequestMapping(value = "/balance", method = RequestMethod.GET)
  45. public @ResponseBody ResponseEntity getBalance(HttpServletRequest httpServletRequest) {
  46. //converter.supports = true;
  47. return voucherService.getBalance();
  48. }
  49. @CrossOrigin(origins = "*")
  50. @RequestMapping(value = "/complete/balance", method = RequestMethod.GET)
  51. public @ResponseBody ResponseEntity getWalletBalance(HttpServletRequest httpServletRequest) {
  52. //converter.supports = true;
  53. return voucherService.getWalletBalance();
  54. }
  55. @CrossOrigin(origins = "*")
  56. @RequestMapping(value = "/complete/balance/v2", method = RequestMethod.GET)
  57. public @ResponseBody ResponseEntity getWalletBalanceV2(HttpServletRequest httpServletRequest) {
  58. //converter.supports=true;
  59. return voucherService.getWalletBalanceV2();
  60. }
  61. @CrossOrigin(origins = "*")
  62. @RequestMapping(value = "/banks", method = RequestMethod.GET)
  63. public @ResponseBody ResponseEntity getBanks(HttpServletRequest httpServletRequest) {
  64. //converter.supports=true;
  65. return voucherService.getDepositBanks();
  66. }
  67. @CrossOrigin(origins = "*")
  68. @RequestMapping(value = "/properties", method = RequestMethod.GET)
  69. public @ResponseBody ResponseEntity getProperties( HttpServletRequest httpServletRequest) {
  70. //converter.supports=true;
  71. return voucherService.getPropertyDetailsForTransactions();
  72. }
  73. @CrossOrigin(origins = "*")
  74. @RequestMapping(value = "/valuationfee", method = RequestMethod.POST)
  75. public @ResponseBody ResponseEntity saveValuationFee(@RequestBody ValuationFeeDTO dto, HttpServletRequest httpServletRequest) {
  76. //converter.supports=true;
  77. return voucherService.saveValuationFee(dto);
  78. }
  79. }

答案1

得分: 0

你可以为转换器类创建自定义的Bean(避免在类上使用@Component注解),并在需要的时候在控制器中进行注入。

例如:

假设你有一个这样的Converter类:

  1. public class Converter {
  2. private boolean supports = false;
  3. public boolean isSupports() {
  4. return supports;
  5. }
  6. public void setSupports(boolean supports) {
  7. this.supports = supports;
  8. }
  9. }

在一个@Configuration类中创建自定义的Converter Bean。

  1. @Configuration
  2. public class SampleConfig {
  3. @Bean(name = "converterSupportTrue")
  4. public Converter beanOne() {
  5. Converter converter = new Converter();
  6. converter.setSupports(true);
  7. return converter;
  8. }
  9. @Bean(name = "converterSupportFalse")
  10. public Converter beanTwo() {
  11. Converter converter = new Converter();
  12. return converter;
  13. }
  14. }

用于测试的控制器:

  1. @Controller
  2. public class FirstController {
  3. @Autowired
  4. private Converter converterSupportTrue;
  5. @GetMapping("/test/support1")
  6. public void test() {
  7. System.out.println(converterSupportTrue.isSupports());
  8. }
  9. }

另一个用于测试的控制器:

  1. @Controller
  2. public class SecondController {
  3. @Autowired
  4. private Converter converterSupportFalse;
  5. @GetMapping("/test/support2")
  6. public void test() {
  7. System.out.println(converterSupportFalse.isSupports());
  8. }
  9. }

你可以在整个应用程序中使用这个Bean,而无需编写样板代码。

英文:

You can create your custom bean for converter class (avoid @Component over the class) and inject it in controller when required.

For example:

Suppose you have a Converter class like this :

  1. public class Converter {
  2. private boolean supports = false;
  3. public boolean isSupports() {
  4. return supports;
  5. }
  6. public void setSupports(boolean supports) {
  7. this.supports = supports;
  8. }
  9. }

Create custom Converter bean in a @Configuration class.

  1. @Configuration
  2. public class SampleConfig {
  3. @Bean(name = "converterSupportTrue")
  4. public Converter beanOne() {
  5. Converter converter = new Converter();
  6. converter.setSupports(true);
  7. return converter;
  8. }
  9. @Bean(name = "converterSupportFalse")
  10. public Converter beanTwo() {
  11. Converter converter = new Converter();
  12. return converter;
  13. }
  14. }

Controller to test :

  1. @Controller
  2. public class FirstController {
  3. @Autowired
  4. private Converter converterSupportTrue;
  5. @GetMapping("/test/support1")
  6. public void test() {
  7. System.out.println(converterSupportTrue.isSupports());
  8. }
  9. }

Another controller to test ;

  1. @Controller
  2. public class SecondController {
  3. @Autowired
  4. private Converter converterSupportFalse;
  5. @GetMapping("/test/support2")
  6. public void test() {
  7. System.out.println(converterSupportFalse.isSupports());
  8. }
  9. }

You can use this bean throughout the application without writing boilerplate code.

huangapple
  • 本文由 发表于 2020年10月20日 15:18:37
  • 转载请务必保留本文链接:https://go.coder-hub.com/64440287.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定