GVKun编程网logo

@Valid注释在Spring中表示什么?(@valid注解)

14

本文的目的是介绍@Valid注释在Spring中表示什么?的详细情况,特别关注@valid注解的相关信息。我们将通过专业的研究、有关数据的分析等多种方式,为您呈现一个全面的了解@Valid注释在Spr

本文的目的是介绍@Valid注释在Spring中表示什么?的详细情况,特别关注@valid注解的相关信息。我们将通过专业的研究、有关数据的分析等多种方式,为您呈现一个全面的了解@Valid注释在Spring中表示什么?的机会,同时也不会遗漏关于@Autowired注释在Spring中如何工作?、@Valid注释在Spring Boot中不起作用、dev/hda5在linux中表示什么、java – 仅在Spring中如何通过注释配置组件扫描?的知识。

本文目录一览:

@Valid注释在Spring中表示什么?(@valid注解)

@Valid注释在Spring中表示什么?(@valid注解)

在以下示例中,该ScriptFile参数标记有@Valid注释。

是什么@Valid注解吗?

@RequestMapping(value = "/scriptfile", method = RequestMethod.POST)    public String create(@Valid ScriptFile scriptFile, BindingResult result, ModelMap modelMap) {        if (scriptFile == null) throw new IllegalArgumentException("A scriptFile is required");            if (result.hasErrors()) {                modelMap.addAttribute("scriptFile", scriptFile);                    modelMap.addAttribute("showcases", ShowCase.findAllShowCases());                    return "scriptfile/create";                }            scriptFile.persist();            return "redirect:/scriptfile/" + scriptFile.getId();        }

答案1

小编典典

这是出于验证目的。

验证将用户输入绑定到模型后,通常需要对模型进行验证。Spring
3支持使用JSR-303进行声明式验证。如果您的类路径中存在JSR-303提供程序(例如Hibernate
Validator),则会自动启用此支持。启用后,您可以简单地通过使用@Valid批注对Controller方法参数进行批注来触发验证:绑定传入的POST参数之后,将验证AppointmentForm;在这种情况下,要验证日期字段值不为null并在将来发生。

在这里查看更多信息:http :
//blog.springsource.com/2009/11/17/spring-3-type-conversion-and-
validation/

@Autowired注释在Spring中如何工作?

@Autowired注释在Spring中如何工作?

真正的问题是,为什么允许我通过以下两种方式编写此代码:

@Controller
public class PostController {
@Autowired 
private PostService postService;

@Autowired 
private CommentService commentService;

....
}

@Controller
public class PostController {

private PostService postService;
private CommentService commentService;

@Autowired 
public PostController(PostService postService,CommentService commentService){
    this.postService = postService;
    this.commentService = commentService;
}

....
}

这些摘要是否相同?推荐哪一个?

最佳答案
第一个解决方案通过反射直接注入值(基本上,JVM将获取您的对象并手动设置值).

第二种解决方案使用构造函数,这意味着该参数是必需的.另外,在将其自己分配给属性之前,您有时间使用所述值. (请注意,构造函数也将通过反射调用).

另一种方法是使用setter,这一次调用一个方法来设置值,这样您就可以在实际设置它之前对其进行操作,但这不是强制性的(因为它不是构造函数的一部分).

关于推荐的一个,我不确定实际上是否有一个“官方推荐的”,但是我倾向于只对强制字段使用构造函数注入而对非强制字段使用setter注入.但据我所知,这主要取决于您与之合作的团队或您的品味.

@Valid注释在Spring Boot中不起作用

@Valid注释在Spring Boot中不起作用

如何解决@Valid注释在Spring Boot中不起作用?

我想通了…这是因为PurchaseWrapperValidator实现的功能org.springframework.validation.Validator会覆盖默认javax.validation.*注释。

解决方法

这是方案,带有注释的控制器@RestController和需要验证PUT@RequestBody参数的方法。我@Valid在参数上使用了注释@NotNull@Min在bean字段上使用了注释,但是它们不起作用。

代码在这里:

豆:

public class PurchaseWrapper {
  @DecimalMin(value = "0.00",message = "discount must be positive")
  @NotNull
  private BigDecimal discount;
  @NotNull
  private Long merchandiseId;
  @NotNull
  private Long addressId;
  @Min(1)
  @NotNull
  private Integer count;
}

控制器

@RestController
@RequestMapping("merchandises")
public class MerchandiseController {

@RequestMapping(value = "purchase",method = RequestMethod.PUT)
public ResponseEntity<RestEntity> purchase(@Valid @Validated @RequestBody PurchaseWrapper purchaseWrapper,@RequestParam String token){
    return new ResponseEntity<>(merchandiseService.purchase(purchaseWrapper,token),HttpStatus.OK);
}

@Autowired
PurchaseWrapperValidator purchaseWrapperValidator;

@InitBinder(value = "purchaseWrapper")
protected void initBinder(WebDataBinder binder) {
    binder.setValidator(purchaseWrapperValidator);
}
}

pom文件:

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    <dependency>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-validator</artifactId>
    </dependency>

我不知道这是怎么回事…而且我猜这是我在同一个参数上使用@Valid@Validated注释都存在的问题。但是,即使我省略了@Validated注释,@Valid它仍然无法正常工作…

有任何想法吗?

dev/hda5在linux中表示什么

dev/hda5在linux中表示什么

dev/hda5在linux中表示ide0接口上主盘的逻辑分区。linux的所有设备均表示为“/dev”目录中的一个文件,而“.dev”目录下“hd”打头的设备是ide硬盘。设备名称中第三个字母为a,表示为第一个硬盘(也成为主盘);分区则使用数字来表示,数字1~4用于表示主分区或扩展分区,逻辑分区的编号从5开始。

dev/hda5在linux中表示什么

本教程操作环境:linux7.3系统、Dell G3电脑。

dev/hda5在linux中表示IDE0接口上主盘的逻辑分区。

Linux的所有设备均表示为/dev目录中的一个文件、.dev目录下“hd”打头的设备是IDE硬盘,“sd”打头的设备是SCSI硬盘。

设备名称中第三个字母为a,表示为第一个硬盘(也成为主盘),而b表示为第二个硬盘(也成为从盘)。

分区则使用数字来表示,数字1~4用于表示主分区或扩展分区,逻辑分区的编号从5开始。IDE0接口上主盘的主分区称为/dev/hda1;而 /dev/hda2表示IDE0接口上主盘的扩展分区;IDE0接口上主盘的第一个逻辑分区称为/dev/hda5

linux逻辑分区

当我们需要更多的分区的时候,需要放弃其中一个主分区,一般是创建三个主分区以后,将第四个分区划分为扩展分区,载将扩展分区划分为若干个逻辑分区来使用。

1、演示创建四个主分区后的效果

1)创建四个分区(具体步骤见上一篇文章)

//进入分区工具
[root@localhost ~]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。

更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。


命令(输入 m 获取帮助):n
Partition type:
   p   primary (3 primary, 0 extended, 1 free)
   e   extended
Select (default e): p
已选择分区 4
起始 扇区 (5015552-10485759,默认为 5015552):
将使用默认值 5015552
Last 扇区, +扇区 or +size{K,M,G} (5015552-10485759,默认为 10485759):
将使用默认值 10485759
分区 4 已设置为 Linux 类型,大小设为 2.6 GiB

命令(输入 m 获取帮助):w
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 16: 设备或资源忙.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
正在同步磁盘。
登录后复制

2)尝试创建第五个分区

[root@localhost ~]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。

更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。

//创建第五个分区提示需要放弃一个主分区创建一个扩展分区
命令(输入 m 获取帮助):n
If you want to create more than four partitions, you must replace a
primary partition with an extended partition first.

命令(输入 m 获取帮助):p    //展示分区表

磁盘 /dev/sdb:5368 MB, 5368709120 字节,10485760 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x6928af85

   设备 Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048     4196351     2097152   83  Linux
/dev/sdb2         4196352     4605951      204800   83  Linux
/dev/sdb3         4605952     5015551      204800   83  Linux
/dev/sdb4         5015552    10485759     2735104   83  Linux

命令(输入 m 获取帮助):
登录后复制

3)删除第四个主分区,将其分为扩展分区

命令(输入 m 获取帮助):d        //输入d删除分区
分区号 (1-4,默认 4):4        //选择删除4号分区
分区 4 已删除

命令(输入 m 获取帮助):n        //现在可以创建分区了
Partition type:
   p   primary (3 primary, 0 extended, 1 free)
   e   extended
Select (default e): e                //选择创建扩展分区
已选择分区 4                            //自动选择最后4号分区
起始 扇区 (5015552-10485759,默认为 5015552):    
将使用默认值 5015552
//直接回车表示将剩余所有空间分给扩展分区
Last 扇区, +扇区 or +size{K,M,G} (5015552-10485759,默认为 10485759): 
将使用默认值 10485759    
分区 4 已设置为 Extended 类型,大小设为 2.6 GiB

命令(输入 m 获取帮助):p

磁盘 /dev/sdb:5368 MB, 5368709120 字节,10485760 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x6928af85

   设备 Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048     4196351     2097152   83  Linux
/dev/sdb2         4196352     4605951      204800   83  Linux
/dev/sdb3         4605952     5015551      204800   83  Linux
/dev/sdb4         5015552    10485759     2735104    5  Extended

命令(输入 m 获取帮助):
登录后复制

在分区表可看到sdb4的类型是extended(扩展分区),扩展分区是不能存放数据的,要想使用,需要将其划分若干逻辑分区,这个逻辑分区没有数量限制。

 4)创建逻辑分区

命令(输入 m 获取帮助):n            //创建分区
All primary partitions are in use
添加逻辑分区 5                            //默认直接创建5号逻辑分区
起始 扇区 (5017600-10485759,默认为 5017600):
将使用默认值 5017600
Last 扇区, +扇区 or +size{K,M,G} (5017600-10485759,默认为 10485759):+200M  //大小设置200M
分区 5 已设置为 Linux 类型,大小设为 200 MiB

命令(输入 m 获取帮助):p            //查看分区表

磁盘 /dev/sdb:5368 MB, 5368709120 字节,10485760 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x6928af85

   设备 Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048     4196351     2097152   83  Linux
/dev/sdb2         4196352     4605951      204800   83  Linux
/dev/sdb3         4605952     5015551      204800   83  Linux
/dev/sdb4         5015552    10485759     2735104    5  Extended
/dev/sdb5         5017600     5427199      204800   83  Linux         //逻辑分区创建成功

命令(输入 m 获取帮助):n                //继续创建分区
All primary partitions are in use
添加逻辑分区 6                            //默认添加逻辑分区
起始 扇区 (5429248-10485759,默认为 5429248):
将使用默认值 5429248
Last 扇区, +扇区 or +size{K,M,G} (5429248-10485759,默认为 10485759)://将剩余空间全分配给6号逻辑分区
将使用默认值 10485759
分区 6 已设置为 Linux 类型,大小设为 2.4 GiB

命令(输入 m 获取帮助):p            //查看分区表

磁盘 /dev/sdb:5368 MB, 5368709120 字节,10485760 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x6928af85

   设备 Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048     4196351     2097152   83  Linux
/dev/sdb2         4196352     4605951      204800   83  Linux
/dev/sdb3         4605952     5015551      204800   83  Linux
/dev/sdb4         5015552    10485759     2735104    5  Extended
/dev/sdb5         5017600     5427199      204800   83  Linux
/dev/sdb6         5429248    10485759     2528256   83  Linux

命令(输入 m 获取帮助):w        //保存分区
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 16: 设备或资源忙.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
正在同步磁盘。
[root@localhost ~]#
登录后复制

2、刷新分区表、格式化、进行挂载

这里讲的都是临时挂载,重启计算机将没有挂载信息,只是为了方便学习了解磁盘,永久挂载需要将挂载命令卸载写在etc/fstab里,以后会讲。

和上篇文章操作一样对分区表刷新、格式化,创建待挂载文件夹,将分区挂载到指定的文件夹。

注意:扩展分区不能够挂载,只能将其划分的逻辑分区进行挂载。

//1、刷新分区表
//直接查看分区表,发现刚刚创建的分区没有显示出来。
[root@localhost ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   20G  0 disk 
├─sda1            8:1    0 1000M  0 part /boot
└─sda2            8:2    0   19G  0 part 
  ├─centos-root 253:0    0   17G  0 lvm  /
  └─centos-swap 253:1    0    2G  0 lvm  [SWAP]
sdb               8:16   0    5G  0 disk 
├─sdb1            8:17   0    2G  0 part 
├─sdb2            8:18   0  200M  0 part /mnt/disk2
└─sdb3            8:19   0  200M  0 part /mnt/fisk3
sdc               8:32   0    5G  0 disk 
sdd               8:48   0    5G  0 disk 
sde               8:64   0    5G  0 disk 
sdf               8:80   0    5G  0 disk 
sdg               8:96   0    5G  0 disk 
sdh               8:112  0    5G  0 disk 
sdi               8:128  0    5G  0 disk 
sr0              11:0    1  4.4G  0 rom  /run/media/root/CentOS 7 x86_64
//刷新分区表
[root@localhost ~]# partprobe /dev/sdb
//刷新之后查看分区表,发现刚刚创建的所有分区都显示出来了
[root@localhost ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   20G  0 disk 
├─sda1            8:1    0 1000M  0 part /boot
└─sda2            8:2    0   19G  0 part 
  ├─centos-root 253:0    0   17G  0 lvm  /
  └─centos-swap 253:1    0    2G  0 lvm  [SWAP]
sdb               8:16   0    5G  0 disk 
├─sdb1            8:17   0    2G  0 part 
├─sdb2            8:18   0  200M  0 part /mnt/disk2
├─sdb3            8:19   0  200M  0 part /mnt/fisk3
├─sdb4            8:20   0  512B  0 part 
├─sdb5            8:21   0  200M  0 part 
└─sdb6            8:22   0  2.4G  0 part 
sdc               8:32   0    5G  0 disk 
sdd               8:48   0    5G  0 disk 
sde               8:64   0    5G  0 disk 
sdf               8:80   0    5G  0 disk 
sdg               8:96   0    5G  0 disk 
sdh               8:112  0    5G  0 disk 
sdi               8:128  0    5G  0 disk 
sr0              11:0    1  4.4G  0 rom  /run/media/root/CentOS 7 x86_64
//2、格式化
//格式化sbd5和sdb6,用分号隔开直接运行两个命令。
[root@localhost ~]# mkfs.ext4 /dev/sdb5;mkfs.ext4  /dev/sdb6
mke2fs 1.42.9 (28-Dec-2013)
文件系统标签=
OS type: Linux
块大小=1024 (log=0)
分块大小=1024 (log=0)
Stride=0 blocks, Stripe width=0 blocks
51200 inodes, 204800 blocks
10240 blocks (5.00%) reserved for the super user
第一个数据块=1
Maximum filesystem blocks=33816576
25 block groups
8192 blocks per group, 8192 fragments per group
2048 inodes per group
Superblock backups stored on blocks: 
	8193, 24577, 40961, 57345, 73729

Allocating group tables: 完成                            
正在写入inode表: 完成                            
Creating journal (4096 blocks): 完成
Writing superblocks and filesystem accounting information: 完成 

mke2fs 1.42.9 (28-Dec-2013)
文件系统标签=
OS type: Linux
块大小=4096 (log=2)
分块大小=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
158080 inodes, 632064 blocks
31603 blocks (5.00%) reserved for the super user
第一个数据块=0
Maximum filesystem blocks=648019968
20 block groups
32768 blocks per group, 32768 fragments per group
7904 inodes per group
Superblock backups stored on blocks: 
	32768, 98304, 163840, 229376, 294912

Allocating group tables: 完成                            
正在写入inode表: 完成                            
Creating journal (16384 blocks): 完成
Writing superblocks and filesystem accounting information: 完成 
//3、挂载
//创建disk5和disk6文件夹
[root@localhost ~]# mkdir /mnt/disk5 /mnt/disk6
//将sdb5挂载到disk5,将sdb6挂载到disk6
[root@localhost ~]# mount -t ext4  /dev/sdb5 /mnt/disk5 ;mount -t ext4  /dev/sdb6 /mnt/disk6
//查看挂载信息
[root@localhost ~]# df -hT
文件系统                类型      容量  已用  可用 已用% 挂载点
devtmpfs                devtmpfs  470M     0  470M    0% /dev
tmpfs                   tmpfs     487M     0  487M    0% /dev/shm
tmpfs                   tmpfs     487M  8.6M  478M    2% /run
tmpfs                   tmpfs     487M     0  487M    0% /sys/fs/cgroup
/dev/mapper/centos-root xfs        18G  4.2G   13G   25% /
/dev/sda1               xfs       997M  172M  826M   18% /boot
tmpfs                   tmpfs      98M   24K   98M    1% /run/user/0
/dev/sr0                iso9660   4.4G  4.4G     0  100% /run/media/root/CentOS 7 x86_64
/dev/sdb2               ext4      190M  1.6M  175M    1% /mnt/disk2
/dev/sdb3               ext4      190M  1.6M  175M    1% /mnt/fisk3
/dev/sdb5               ext4      190M  1.6M  175M    1% /mnt/disk5
/dev/sdb6               ext4      2.4G  7.3M  2.2G    1% /mnt/disk6
//挂载成功
登录后复制

3、卸载(取消分区挂载)

命令:umount   /dev/需要卸载的分区

[root@localhost ~]# df -hT
文件系统                类型      容量  已用  可用 已用% 挂载点
devtmpfs                devtmpfs  470M     0  470M    0% /dev
tmpfs                   tmpfs     487M     0  487M    0% /dev/shm
tmpfs                   tmpfs     487M  8.6M  478M    2% /run
tmpfs                   tmpfs     487M     0  487M    0% /sys/fs/cgroup
/dev/mapper/centos-root xfs        18G  4.2G   13G   25% /
/dev/sda1               xfs       997M  172M  826M   18% /boot
tmpfs                   tmpfs      98M   24K   98M    1% /run/user/0
/dev/sr0                iso9660   4.4G  4.4G     0  100% /run/media/root/CentOS 7 x86_64
/dev/sdb2               ext4      190M  1.6M  175M    1% /mnt/disk2
/dev/sdb3               ext4      190M  1.6M  175M    1% /mnt/fisk3
/dev/sdb5               ext4      190M  1.6M  175M    1% /mnt/disk5
/dev/sdb6               ext4      2.4G  7.3M  2.2     1% /mnt/disk6
[root@localhost ~]# umont  /dev/sdb6        //取消sbd6挂载
[root@localhost ~]# df -hT        //查看挂载信息,没有sbd6的挂载信息了
文件系统                类型      容量  已用  可用 已用% 挂载点
devtmpfs                devtmpfs  470M     0  470M    0% /dev
tmpfs                   tmpfs     487M     0  487M    0% /dev/shm
tmpfs                   tmpfs     487M  8.6M  478M    2% /run
tmpfs                   tmpfs     487M     0  487M    0% /sys/fs/cgroup
/dev/mapper/centos-root xfs        18G  4.2G   13G   25% /
/dev/sda1               xfs       997M  172M  826M   18% /boot
tmpfs                   tmpfs      98M   24K   98M    1% /run/user/0
/dev/sr0                iso9660   4.4G  4.4G     0  100% /run/media/root/CentOS 7 x86_64
/dev/sdb2               ext4      190M  1.6M  175M    1% /mnt/disk2
/dev/sdb3               ext4      190M  1.6M  175M    1% /mnt/fisk3
/dev/sdb5               ext4      190M  1.6M  175M    1% /mnt/disk5
登录后复制

 取消挂载,相当于拔掉U盘,比如我刚刚取消了sdb5在disk5的挂载,这个时候相当于我拔掉了sdb5这个U盘,本来存放在disk5内的文件都会消失,因为那些文件都是存放在sdb5的,我拔掉了这个U盘,自然这些文件就消失了,当重新挂载sdb5,这些文件将会恢复。

总结

        逻辑分区的后续格式化以及挂载是和当时主分区是一样的,唯一不一样的是逻辑分区可以创建若干个,特别注意的是扩展分区是不能够挂载,不能够储存数据的,需要划分逻辑分区来使用,这篇文章主要将逻辑分区的划分。

相关推荐:《Linux视频教程》

以上就是dev/hda5在linux中表示什么的详细内容,更多请关注php中文网其它相关文章!

java – 仅在Spring中如何通过注释配置组件扫描?

java – 仅在Spring中如何通过注释配置组件扫描?

我在tomcat webserver环境中运行一个war文件.

我有一个基于注释的配置为@Beans和一个xml配置为webservices:

@Configuration
//@ComponentScan(basePackageClasses = ...)
public class AppConfig {
    //beans @Bean
}

applicationContext.xml中:

<beans>
    <context:component-scan base-package="..."/>
    <jaxws:endpoint ... />
</bean>

问题:我想通过注释定义@ComponentScan来具有类型安全性.但是如果我这样做,则不执行扫描.相比之下,当我使用< context:component-scan ..一切正常. Spring组件扫描是否与Web服务器中的xml配置绑定在一起进行扫描?

解决方法

通过 http://docs.spring.io/spring-javaconfig/docs/1.0.0.M4/reference/html/ch06s02.html
就像是.
@Configuration
    @ComponentScan("com.company") // search the com.company package for @Component classes
    @ImportXml("classpath:com/company/data-access-config.xml")        
    public class Config {
    }

我们今天的关于@Valid注释在Spring中表示什么?@valid注解的分享就到这里,谢谢您的阅读,如果想了解更多关于@Autowired注释在Spring中如何工作?、@Valid注释在Spring Boot中不起作用、dev/hda5在linux中表示什么、java – 仅在Spring中如何通过注释配置组件扫描?的相关信息,可以在本站进行搜索。

本文标签: