小编Jig*_*ish的帖子

@Value注释和Environment API之间的区别?

使用@Value注释注入类的字段和使用Spring Environment API查找它们之间是否存在任何显着差异?一个优先于另一个(在什么情况下)?

使用@Value的示例:

class Config {
    @Value("${db.driverClassName}")
    private String driverClassName;

    @Value("${db.url}")
    private String url;

    @Value("${db.username}")
    private String username;

    @Value("${db.password}")
    private String password;

    @Bean
    public javax.sql.DataSource dataSource(){

        PoolProperties poolProperties = new PoolProperties();
        poolProperties.setDriverClassName(driverClassName);
        poolProperties.setUrl(url);         
        poolProperties.setUsername(username);
        poolProperties.setPassword(password);

        return new org.apache.tomcat.jdbc.pool.DataSource(poolProperties);

    }

}
Run Code Online (Sandbox Code Playgroud)

使用Environment API的示例:

class Config {
    @Autowired
    private Environment environment;

    @Bean
    public javax.sql.DataSource dataSource(){

        PoolProperties poolProperties = new PoolProperties();
        poolProperties.setDriverClassName(environment.getProperty("db.driverClassName"));
        poolProperties.setUrl(environment.getProperty("db.url"));           
        poolProperties.setUsername(environment.getProperty("db.username"));
        poolProperties.setPassword(environment.getProperty("db.password"));

        return new org.apache.tomcat.jdbc.pool.DataSource(poolProperties);
    }

}
Run Code Online (Sandbox Code Playgroud)

spring spring-mvc

12
推荐指数
1
解决办法
4942
查看次数

在REST应用程序中抛出BindException而不是MethodArgumentNotValidException

我有一个简单的Spring Rest Controller和一些验证.我的理解是验证失败会抛出MethodArgumentNotValidException.但是,我的代码抛出了BindException.在调试消息中,我还看到应用程序返回null ModelAndView.

为什么Rest Controller会抛出BindException或返回null ModelAndView?

注意:我正在使用curl测试我的Web应用程序并进行HTTP POST

curl -X POST http://localhost:8080/tasks
Run Code Online (Sandbox Code Playgroud)

我故意省略"name"参数,这是一个标有@NotNull和@NotBlank注释的必填字段.

我的控制器:

@RestController
public class TasksController {

    private static Logger logger = Logger.getLogger(TasksController.class);

    @Autowired
    private MessageSource messageSource;

    @Autowired
    private Validator validator;

    @InitBinder
    protected void initBinder(WebDataBinder binder){
        binder.setValidator(this.validator);
    }         


    @RequestMapping(value = "/tasks", method = RequestMethod.POST)
    public Task createTask(@Valid TasksCommand tasksCommand){

        Task task = new Task();
        task.setName(tasksCommand.getName());
        task.setDue(tasksCommand.getDue());
        task.setCategory(tasksCommand.getCategory());

        return task;
    }
}
Run Code Online (Sandbox Code Playgroud)

我的"命令"类(包含验证注释)

public class TasksCommand {

    @NotBlank
    @NotNull
    private String name;

    private Calendar due;

    private String category; …
Run Code Online (Sandbox Code Playgroud)

java rest spring exceptionhandler

9
推荐指数
1
解决办法
3338
查看次数

标签 统计

spring ×2

exceptionhandler ×1

java ×1

rest ×1

spring-mvc ×1