Skip to content
Toggle navigation
Toggle navigation
This project
Loading...
Sign in
legobackend
/
lego-manage
Go to a project
Toggle navigation
Toggle navigation pinning
Projects
Groups
Snippets
Help
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Network
Create a new issue
Builds
Commits
Issue Boards
Files
Commits
Network
Compare
Branches
Tags
66476346
authored
2025-04-23 16:55:22 +0800
by
chentao
Browse Files
Options
Browse Files
Tag
Download
Email Patches
Plain Diff
no message
1 parent
1306678b
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
67 additions
and
0 deletions
lego-common/src/main/java/com/lego/common/annotation/AtLeastOneNonNull.java
lego-common/src/main/java/com/lego/common/annotation/AtLeastOneNonNullValidator.java
lego-core/src/main/java/com/lego/core/domin/bo/CourseBo.java
lego-common/src/main/java/com/lego/common/annotation/AtLeastOneNonNull.java
0 → 100644
View file @
6647634
package
com
.
lego
.
common
.
annotation
;
/**
* @author chentao
* @date 2025/4/23
*/
import
javax.validation.Constraint
;
import
javax.validation.Payload
;
import
java.lang.annotation.ElementType
;
import
java.lang.annotation.Retention
;
import
java.lang.annotation.RetentionPolicy
;
import
java.lang.annotation.Target
;
@Constraint
(
validatedBy
=
AtLeastOneNonNullValidator
.
class
)
@Target
({
ElementType
.
TYPE
})
@Retention
(
RetentionPolicy
.
RUNTIME
)
public
@interface
AtLeastOneNonNull
{
String
message
()
default
"At least one field must be non-null"
;
Class
<?>[]
groups
()
default
{};
Class
<?
extends
Payload
>[]
payload
()
default
{};
String
[]
fields
();
// 指定需要校验的字段名数组
}
\ No newline at end of file
lego-common/src/main/java/com/lego/common/annotation/AtLeastOneNonNullValidator.java
0 → 100644
View file @
6647634
package
com
.
lego
.
common
.
annotation
;
import
com.lego.common.annotation.AtLeastOneNonNull
;
import
javax.validation.ConstraintValidator
;
import
javax.validation.ConstraintValidatorContext
;
import
java.lang.reflect.Field
;
import
java.util.Arrays
;
import
java.util.List
;
import
java.util.Objects
;
/**
* @author chentao
* @date 2025/4/23
*/
public
class
AtLeastOneNonNullValidator
implements
ConstraintValidator
<
AtLeastOneNonNull
,
Object
>
{
private
List
<
String
>
fields
;
@Override
public
void
initialize
(
AtLeastOneNonNull
constraintAnnotation
)
{
fields
=
Arrays
.
asList
(
constraintAnnotation
.
fields
());
}
@Override
public
boolean
isValid
(
Object
object
,
ConstraintValidatorContext
context
)
{
if
(
object
==
null
)
{
return
false
;
// 如果对象本身为null,则不满足条件
}
for
(
String
fieldName
:
fields
)
{
try
{
Field
field
=
object
.
getClass
().
getDeclaredField
(
fieldName
);
field
.
setAccessible
(
true
);
// 设置私有字段可访问,以便读取值
if
(
Objects
.
nonNull
(
field
.
get
(
object
)))
{
// 检查字段是否非空
return
true
;
// 如果至少一个字段非空,返回true
}
}
catch
(
NoSuchFieldException
|
IllegalAccessException
e
)
{
// 处理异常,例如记录日志等
return
false
;
// 出现异常时,保守起见返回false,实际中应更细致处理异常情况
}
}
return
false
;
// 所有指定字段均为空或出现异常,返回false
}
}
lego-core/src/main/java/com/lego/core/domin/bo/CourseBo.java
View file @
6647634
package
com
.
lego
.
core
.
domin
.
bo
;
import
com.lego.common.annotation.AtLeastOneNonNull
;
import
lombok.Data
;
import
javax.validation.constraints.NotBlank
;
...
...
@@ -12,6 +13,7 @@ import javax.validation.constraints.Size;
* @date 2024/9/8 16:29
*/
@Data
@AtLeastOneNonNull
(
fields
=
{
"twoDimensionalOssId"
,
"threeDimensionalOssId"
})
public
class
CourseBo
extends
BaseBO
{
private
static
final
long
serialVersionUID
=
1L
;
...
...
Write
Preview
Styling with
Markdown
is supported
Attach a file
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to post a comment