Spring Boot 和 MVC:如何从 application.properties 为 @RequestBody 对象字段设置默认值?

Posted

技术标签:

【中文标题】Spring Boot 和 MVC:如何从 application.properties 为 @RequestBody 对象字段设置默认值?【英文标题】:Spring Boot and MVC: How to set default value for @RequestBody object fields from application.properties? 【发布时间】:2013-12-26 12:31:32 【问题描述】:

我正在编写以下代码:

@RestController
@RequestMapping("/user")
public class UserController

    @Autowired private JdbcTemplate jt;

    @RequestMapping("/getUsers")
    public ListResult getUsers(@RequestBody GetUsersArgs args)
    
        // paging query that returns ListResult object.
        // ...
    

    private static class GetUsersArgs
    
        public int firstRowIndex = 0;
        public int pageSize = 500;
    

我要做的是,从 Spring Boot 的 application.properties 文件中为 GetUsersArgs 对象的 pageSize 字段设置默认值。

当application.properties文件内容如下时,

server.port: 9000
management.port: 9001
userList.pageSize: 100

pageSize 字段必须设置为 100。否则,设置为 500。

怎么做?

【问题讨论】:

【参考方案1】:

那样做是行不通的。 Spring 只能替换托管 bean 中的值,您的是由请求参数构造的。你可以做的就是在你的控制器中注入一个值并使用它

public class UserController

    @Value("$userList.pageSize:500")
    private int pageSize;

然后,您可以在方法中使用此值在对象上设置pageSize

【讨论】:

谢谢。但是GetUserArgs类不能是静态内部类(因为静态类的对象不能访问外部类的成员变量),是这样吗? 为什么不呢。为什么你不能从getUsers 方法调用GetUserArgs 上的方法?只需在GetUserArgs 上添加setPageSize 方法并在需要时调用。

以上是关于Spring Boot 和 MVC:如何从 application.properties 为 @RequestBody 对象字段设置默认值?的主要内容,如果未能解决你的问题,请参考以下文章

如何为JSP配置spring boot mvc app?

在 Spring Boot App 中使用 Jquery 和 FormData 提交表单字段并上传 File 到 Spring MVC Controller

从Spring MVC 到 Spring BOOT的简化道路

Spring MVC或Spring Boot配置默认访问页面不生效?

Spring-boot - 如何同时使用 Resteasy JAX-RS 和 Spring MVC 控制器

如何将 Spring Boot 项目迁移到旧 Spring MVC 项目。面临的问题,如何在遗留 Spring MVC 项目中读取 application.properties 文件