标签: jsr

仅在字段不为空时验证

我使用JSR303 Spring Validation并且我有以下内容;

@Digits(fraction = 0, integer = 15)
private String tpMobile;
Run Code Online (Sandbox Code Playgroud)

验证说Must be number between 10-15 digits,但问题是这个字段是可选的。因此,当用户将其留空时,也会显示相同的错误消息。

所以我想做的是仅在该字段不为空时才进行验证。如果该字段为空,则跳过验证该字段

java validation spring jsr bean-validation

6
推荐指数
1
解决办法
8370
查看次数

jsr关键字是什么意思?

我正在看一些Java代码,我注意到以下内容:

if (!foo(bar, baz, qux)) {
    i = 0; jsr 433;
}
Run Code Online (Sandbox Code Playgroud)

javac对它嗤之以鼻,说它不是一个声明,并且在关键字之后会出现分号jsr.

我做了一些谷歌搜索,我发现一些代码包含相同的东西,这让我相信它是故意的(即使他们也无法让它编译).那怎么jsr办?如何获取包含它的代码进行编译?

java jsr

5
推荐指数
1
解决办法
1815
查看次数

"撤回"状态对JSR意味着什么?

我正在检查JSR 227页面并查看其状态显示为"撤消".这个状态意味着什么?这是否意味着它被弃用了?是否有更新版本取代了此规范?

java jsr oracle-adf

5
推荐指数
2
解决办法
667
查看次数

如何在自定义 jsr 303 验证中设置 FieldError 字段

我正在春天创建一个网络服务。我有一个 Params DTO,它嵌套在我的 OtherParentDTO 中。每个请求可能只包含 params Dto 中的某些字段。如果字段存在,那么我需要进行验证(基本上是空检查)。在自定义验证器中,我将指定需要针对特定​​请求验证哪些字段。我的问题是在控制器中,错误字段作为参数返回。有没有办法将其更改为 params.customerId 或 parmas.userId。

更新客户需求:

{"params":{"customerId" : "b2cab997-df13-4cb0-8f67-4357b019bb96"}, "客户":{}}

更新用户要求:

{"params":{"userId" : "b2cab997-df13-4cb0-8f67-4357b019bb96"}, "用户":{}}

@JsonSerialize(include = Inclusion.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown = true)
public class Params {

    private String customerId;
    private String userId;

    //setter and getter are there
}

public class UpdateCustomerRequestDTO {

    @NotNull
    @IsValid(params = {"customerId"}) 
    protected Params params;
    @NotNull @Valid
    private Customer customer;
}

public class UpdateUserRequestDTO {

    @NotNull
    @IsValid(params = {"userId"}) 
    protected Params params;
    @NotNull @Valid
    private User user;
}
Run Code Online (Sandbox Code Playgroud)

自定义约束验证器

@Constraint(validatedBy = …
Run Code Online (Sandbox Code Playgroud)

spring-mvc custom-validators jsr bean-validation

5
推荐指数
0
解决办法
1749
查看次数

Spring 验证 - NULL 或有效的 url

在我的 Spring Boot 应用程序中,我有以下方法:

Decision create(@NotBlank String name, String url, @NotNull User author);
Run Code Online (Sandbox Code Playgroud)

现在,我直接在代码中检查以下条件:

if (!org.apache.commons.lang3.StringUtils.isEmpty(url) && !urlValidator.isValid(url)) {
    throw new IllegalArgumentException("Decision url is not valid");
}
Run Code Online (Sandbox Code Playgroud)

换句话说 -url参数可以是null有效的 url。

是否可以用现有的验证注释(例如 JSR-303)替换此代码?

java validation spring jsr bean-validation

5
推荐指数
1
解决办法
9063
查看次数

@Basic(可选= false) vs @Column(nullable = false) vs @NotNull

在这三个选项中,我应该使用一个或两个或全部三个选项组合来防止空值?

@NotNull
@Column(name = "SOME_VALUE", nullable = false)
@Basic(optional = false)
private String someValue;
Run Code Online (Sandbox Code Playgroud)

请注意,我不认为这与现有问题重复。我看到许多 问题都询问这三个选项的子集,但尚未找到一个询问这三个选项中哪一个适合在现代 JPA/Hibernate 堆栈中使用的问题。

validation hibernate jpa jsr

5
推荐指数
1
解决办法
2234
查看次数

如何在内存数据库脚本中指定h2的字符编码?

我在JPA测试类中遇到字符编码问题。

\n\n

在我的h2 内存数据库中,我有这个插入查询

\n\n
INSERT INTO MYTABLE (ID,FIELD1,FIELD2) VALUES (100,\'ABC\',\'R\xc3\xa9clamation\');\n
Run Code Online (Sandbox Code Playgroud)\n\n

(请注意“R\xc3\xa9clamation”中的“\xc3\xa9”字符)

\n\n

在我的 JUnit 测试中,我尝试断言 FIELD2 列的值等于“R\xc3\xa9clamation”(如您所见)

\n\n

但它失败并出现以下错误:

\n\n
\n

org.junit.ComparisonFailure:预期:R[\xc3\xa9]clamation,但\n是:R[\xef\xbf\xbd]clamation

\n
\n\n

我想知道是否有一种方法可以在 persistence.xml 文件中指定字符编码(也许?或其他地方)

\n\n

这是我的 persistence.xml 测试文件:

\n\n
<?xml version="1.0" encoding="UTF-8"?>\n<persistence\n    version="2.1"\n    xmlns="http://xmlns.jcp.org/xml/ns/persistence"\n    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"\n    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence\n             http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">\n\n    <persistence-unit name="myTestPU">\n        <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>\n        <class>com.myproject.myclass1</class>\n        <class>com.myproject.myclass2</class>\n        <properties>\n            <property\n                name="javax.persistence.schema-generation.database.action"\n                value="none" />\n            <property\n                name="javax.persistence.sharedCache.mode"\n                value="ENABLE_SELECTIVE" />\n            <property\n                name="javax.persistence.jdbc.url"\n                value="jdbc:h2:mem:test;INIT=RUNSCRIPT FROM \'classpath:ddl/schema.sql\'\\;RUNSCRIPT FROM \'classpath:ddl/data.sql\'" />\n            <property\n                name="javax.persistence.jdbc.driver"\n                value="org.h2.Driver" />\n            <property\n                name="hibernate.dialect"\n                value="org.hibernate.dialect.H2Dialect" />\n            <property\n                name="hibernate.show_sql"\n …
Run Code Online (Sandbox Code Playgroud)

jpa h2 persistence.xml jsr

5
推荐指数
1
解决办法
1万
查看次数

在List <String>上添加@NotNull或Pattern约束

我们如何确保列表中的各个字符串不为空/空或遵循特定模式

@NotNull
List<String> emailIds;
Run Code Online (Sandbox Code Playgroud)

我还想添加一个模式

@Pattern("\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b.")

但我可以没有它.但我肯定希望有一个约束,它将检查列表中的任何字符串是否为空或空白.Json架构也将如何

"ids": {
      "description": "The  ids associated with this.", 
    "type": "array",
        "minItems": 1,
        "items": {
        "type": "string",
         "required" :true }
 }

"required" :true does not seem to do the job
Run Code Online (Sandbox Code Playgroud)

java validation json jsr hibernate-validator

4
推荐指数
3
解决办法
1万
查看次数

如何验证@RequestParams是否为空?

我有一个计算器服务,从用户获取操作类型num1和num2.我需要验证用户是否实际输入了这些值,而不是将其留空.

@RequestMapping(value = "/calculate")
@ResponseBody
public CalculationResult calculate(@RequestParam(name = "op") String operation, @RequestParam(name = "num1") Double num1, @RequestParam(name = "num2") Double num2) {
    System.out.print("Operation:" + operation);
    Double calculate = calculatorService.calculate(operation, num1, num2);
    return new CalculationResult(calculate);
}
Run Code Online (Sandbox Code Playgroud)

我有一个集成测试,我需要传递,因为它当前失败并出现错误:

{\"timestamp \":1488875777084,\"status \":400,\"error \":\"Bad Request \",\"exception \":\"org.springframework.web.method.annotation.MethodArgumentTypeMismatchException\",""message \":\"无法将'java.lang.String'类型的值转换为必需类型'java.lang.Double';

以下是我的测试用例:

@Test
public void validates_all_parameters_are_set() throws Exception {
    ResponseEntity<String> response = template.getForEntity( "/calculate?op=&num1=&num2=",
            String.class);
    assertThat(response.getStatusCode(), equalTo(HttpStatus.BAD_REQUEST));
    assertThat(response.getBody(), equalTo("{\"error\":\"At least one parameter is invalid or not supplied\"}"));
}
Run Code Online (Sandbox Code Playgroud)

我不知道如何验证这一点.

java junit4 jsr bean-validation spring-boot

4
推荐指数
2
解决办法
1万
查看次数

仅在保存(插入)时进行休眠验证

我们遇到了遗留代码问题。有一个用于“用户名”字段的验证集,用于验证其长度并确保其至少包含一个字母:

@Column(name = "username")
@Size(min = 4, max = 40)
@Pattern(regexp = "^.*[a-zA-Z]+.*$")
private String username;
Run Code Online (Sandbox Code Playgroud)

我们面临的问题是,一些现有的旧数据不适合这些验证,我正在尝试找到一种方法,使旧数据(旧用户)可以忽略这些验证,同时仍将这些验证应用于新创建的用户。

我正在考虑将验证移至setUsername(...)方法(因此将仅在实际更改时验证值),但这导致了异常:

javax.validation.ValidationException: Annotated methods must follow the JavaBeans naming convention. setUsername() does not.
Run Code Online (Sandbox Code Playgroud)

我还确保将实体设置为dynamicUpdate=true,但这无济于事,因为hibernate会验证所有属性,即使没有发生更改也是如此。

如何防止在更新过程中对现有实体执行这些验证?
我不希望该修复程序影响同一实体上的其他属性验证,并且我无法更改休眠配置。

java validation hibernate jsr bean-validation

4
推荐指数
1
解决办法
1395
查看次数