标签: javax

javax.validation验证值列表?

有没有办法使用javax.validation验证一个名为color的字符串类型的变量,需要使用注释只有这些值(红色,蓝色,绿色,粉红色)?

我所看到的 @size(min=1, max=25)@notnull,但有没有这样的事情@In(red, blue, green, pink)

或多或少类似于In-keyword用于mysql

java validation spring javax

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

通过子协议Websocket ServerEndpoint实例

基于这个问题,我想基于协商的子协议创建一个服务器端点实例,以不同的方式处理各种协议消息.不幸的是ServerEndpointConfig.Configurator.getEndpointInstance[ docs ]不允许我访问任何相关的会话数据来获得协商的子协议,所以我可以实例化不同的类.

public static class ServerEndpointConfigurator extends
        ServerEndpointConfig.Configurator {

    public ServerEndpointConfigurator()
    {
    }

    @Override
    public void modifyHandshake(ServerEndpointConfig config, HandshakeRequest request, HandshakeResponse response) {
        // useful to work with session data in endpoint instance but not at getEndpointInstance
        HttpSession httpSession = (HttpSession) request.getHttpSession();
        config.getUserProperties().put(HttpSession.class.getName(), httpSession);
    }

    @Override
    public <T> T getEndpointInstance(Class<T> endpointClass) throws InstantiationException {

        // TODO get negotiated subprotocol and instantiate endpoint using switch case or factory

        return (T) new WebSocketControllerA();

        // or return (T) …
Run Code Online (Sandbox Code Playgroud)

java java-ee websocket javax

15
推荐指数
1
解决办法
562
查看次数

为什么Swagger在示例中创建了一个systemId字段?

我有一个REST POST函数,它具有以下标题:

@POST
@Consumes(value = { MediaType.APPLICATION_JSON + ";charset=utf-8" })
@Produces(value = { MediaType.APPLICATION_JSON + ";charset=utf-8" })
@ApiOperation(value = "Create a document type", notes = "creates a document type from Json and returns the created type", response = Response.class)
@Session(roles = { Role.ROLE_ADMINISTRATOR })
@PublicApi
public Response create(
        @ApiParam(value = "Created DocumentType", required = true)
        @SwaggerDataType(type = 
           com.infor.daf.icp.internal.rest.models.DocumentType.class) 
        com.infor.daf.icp.internal.rest.models.DocumentType documentType) {
Run Code Online (Sandbox Code Playgroud)

当我在Swagger UI中查看它时,Swagger会创建一个示例请求体.那个尸体有

systemId (string, optional),
Run Code Online (Sandbox Code Playgroud)

在模型视图和

systemId : "string"
Run Code Online (Sandbox Code Playgroud)

在JSON视图中.但是在整个项目中没有一个名为的字段systemId.我一个接一个地检查了请求类及其祖先,并通过搜索Java检查了整个项目.systemId即使是另一个名称的子字符串,该符号序列也不会出现.

Swagger在哪里得到这个名字,我怎么能阻止它呢?因为我希望它能够创建一个有效的例子.

编辑:API函数本身可以毫无问题地获取JSON输入,并正确地组成声明的类的对象.

进口:

package com....documentarchive.rest.v1 …
Run Code Online (Sandbox Code Playgroud)

java rest json swagger javax

14
推荐指数
1
解决办法
479
查看次数

在 Kotlin 中禁用非空检查

class User(val name: String)
Run Code Online (Sandbox Code Playgroud)

我知道在构造函数中将添加此检查

Intrinsics.checkParameterIsNotNull(name)
Run Code Online (Sandbox Code Playgroud)

确保name不存储空值。

有没有办法检测不生成此类检查?也许是注释?

我们在 Spring 中需要这个,当将 json 字符串映射到一个类时。验证是通过完成@NotNull@Valid从的javax

class User(@field:NotNull @field:Email val name: String)
Run Code Online (Sandbox Code Playgroud)

因此,在对象创建后立即执行检查,但由于从构造函数抛出异常,这是不可能的。

bean-validation kotlin javax

8
推荐指数
1
解决办法
1687
查看次数

如何通过WebSockets正确向客户端报告错误

当我的服务器发生内部错误时,如何正确关闭 websocket 并向客户端提供干净、信息丰富的响应?在我当前的情况下,客户端在连接时必须提供一个参数,并且我正在尝试处理 OnOpen 收到的不正确或丢失的参数。

这个例子表明我可以在 OnOpen 中抛出一个异常,它最终会调用 OnError ,我可以在其中给出原因和消息来关闭。它有点工作,但客户端只收到 EOF、1006、CLOSE_ABNORMAL。

另外,因为我没有找到其他讨论,所以我无法说出什么可能是最佳实践。

我正在使用 JSR-356 规范,如下所示:

@ClientEndpoint
@ServerEndpoint(value="/ws/events/")
public class WebSocketEvents
{
    private javax.websocket.Session session;
    private long token;

    @OnOpen
    public void onWebSocketConnect(javax.websocket.Session session) throws BadRequestException
    {
        logger.info("WebSocket connection attempt: " + session);
        this.session = session;
        // this throws BadRequestException if null or invalid long
        // with short detail message, e.g., "Missing parameter: token"
        token = HTTP.getRequiredLongParameter(session, "token");
    }

    @OnMessage
    public void onWebSocketText(String message)
    {
        logger.info("Received text message: " + message); …
Run Code Online (Sandbox Code Playgroud)

java java-websocket javax

7
推荐指数
1
解决办法
7197
查看次数

NoClassDefFoundError: javax/ws/rs/client/ClientBuilder

我正在尝试创建一个非常简单的 Rest Client。我正在使用:Netbeans 8 maven 项目

依赖:

    <dependencies>
        <dependency>
            <groupId>javax.ws.rs</groupId>
            <artifactId>javax.ws.rs-api</artifactId>
            <version>2.1-m01</version>
        </dependency>
        <dependency>
            <groupId>org.glassfish.jersey.core</groupId>
            <artifactId>jersey-client</artifactId>
            <version>2.24.1</version>
        </dependency>
        <dependency>
            <groupId>org.jboss.resteasy</groupId>
            <artifactId>resteasy-client</artifactId>
            <version>3.0.16.Final</version>
        </dependency>
    </dependencies>
Run Code Online (Sandbox Code Playgroud)

和代码:

public class Client_con {

public static final String BASE_URI = "http://localhost:8000/test";
public static final String PATH_NAME = "/h";
public static void main (String [] args){

   Client client = ClientBuilder.newClient();

    //WS text get
    WebTarget target = client.target(BASE_URI).path(PATH_NAME);
    String res = target.request().get().readEntity(String.class);
    System.out.println(res);
}
}
Run Code Online (Sandbox Code Playgroud)

但我总是得到同样的错误:

  Exception in thread "main" java.lang.NoClassDefFoundError: 
   javax/ws/rs/client/ClientBuilder
      at ah.consumer.Client_con.main(Client_con.java:38)
  Caused by: java.lang.ClassNotFoundException: …
Run Code Online (Sandbox Code Playgroud)

rest client javax

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

SpringBoot Keycloak NoSuchMethodError: javax.ws.rs.core.UriBuilder.resolveTemplates

我的 SpringBoot 应用程序中的 POM 可能有问题。

目前我正在尝试使用“admin-client-keycloak”访问我的 Keycloak 服务器

但是在通话中:

Response response = getInstance().realm(REALM).users().create(user);
Run Code Online (Sandbox Code Playgroud)

我得到错误:

java.lang.NoSuchMethodError: javax.ws.rs.core.UriBuilder.resolveTemplates(Ljava/util/Map;)Ljavax/ws/rs/core/UriBuilder;
        at org.jboss.resteasy.client.jaxrs.internal.ClientWebTarget.resolveTemplates(ClientWebTarget.java:178) ~[resteasy-client-3.5.1.Final.jar:3.5.1.Final]
        at org.jboss.resteasy.client.jaxrs.internal.proxy.SubResourceInvoker.invoke(SubResourceInvoker.java:65) ~[resteasy-client-3.5.1.Final.jar:3.5.1.Final]
        at org.jboss.resteasy.client.jaxrs.internal.proxy.ClientProxy.invoke(ClientProxy.java:76) ~[resteasy-client-3.5.1.Final.jar:3.5.1.Final]
        at com.sun.proxy.$Proxy198.realm(Unknown Source) ~[na:na]
        at org.keycloak.admin.client.Keycloak.realm(Keycloak.java:118) ~[keycloak-admin-client-3.4.3.Final.jar:3.4.3.Final]
Run Code Online (Sandbox Code Playgroud)

老实说:我不是 Maven 专家,而是从几个网络灵魂中将它拼接在一起,我希望有些部分仍然过时或什么的。

POM依赖:

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <version>1.5.3.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
        <version>1.5.3.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>6.0.6</version>
        <scope>runtime</scope>
    </dependency>

    <!-- Keycloak -->
    <dependency>
        <groupId>org.keycloak</groupId>
        <artifactId>keycloak-spring-boot-starter</artifactId>
    </dependency>
    <dependency>
        <groupId>org.keycloak</groupId>
        <artifactId>keycloak-admin-client</artifactId>
        <version>3.4.3.Final</version>
    </dependency>

    <dependency>
        <groupId>org.jboss.resteasy</groupId>
        <artifactId>resteasy-client</artifactId>
        <version>3.5.1.Final</version>
    </dependency>

    <!-- JUnit -->
    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-api</artifactId>
        <version>${junit.jupiter.version}</version>
        <scope>test</scope>
    </dependency>
    <dependency> …
Run Code Online (Sandbox Code Playgroud)

spring-boot keycloak javax

6
推荐指数
2
解决办法
3038
查看次数

javax 验证大于或小于来自其他属性的验证

关于 javax.validation

  @NotNull(message = "From can't be null")
  @Min(value = 1, message = "From must be greater than zero")
  private Long from;
  @NotNull(message = "To can't be null")
  @Min(value = 1, message = "To must be greater than zero")
  private Long to;
Run Code Online (Sandbox Code Playgroud)

我还想验证FROM应该小于TO并且TO应该大于FROM?我们如何使用 javax 验证的注释来做到这一点?

java validation javax

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

解组XML输入流时SAXNotRecognizedException

在尝试解组XML数据的输入流时,我遇到了这个异常.这显然是Xerces库的一个问题,但我很难找到解决方案.我在带有Java 8的Glassfish服务器上运行带有EclipseLink的Java EE程序.我的REST服务中出现这种错误,它将XML输入流作为参数.我得到的错误是:

Caused by: java.lang.IllegalStateException: org.xml.sax.SAXNotRecognizedException: unrecognized feature http://javax.xml.XMLConstants/feature/secure-processing
at com.sun.xml.bind.v2.util.XmlFactory.createParserFactory(XmlFactory.java:135)
at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.getXMLReader(UnmarshallerImpl.java:154)
at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:172)
at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:219)
Run Code Online (Sandbox Code Playgroud)

我已经看到这里发布的其他问题建议升级我正在使用的Xerces库,并让它成为最重要的依赖,所以Maven抓住了那个而不是其他一些库,但它还没有为我做好.我的POM文件的相关部分是:

<dependencies>
    <dependency>
        <groupId>xerces</groupId>
        <artifactId>xercesImpl</artifactId>
        <version>2.11.0</version>
    </dependency>
    <dependency>
        <groupId>javax</groupId>
        <artifactId>javaee-api</artifactId>
        <version>7.0</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.glassfish.jersey.containers</groupId>
        <artifactId>jersey-container-servlet</artifactId>
        <version>2.22.2</version>
        <scope>provided</scope>
        <exclusions>
            <exclusion>
                <groupId>xerces</groupId>
                <artifactId>xercesImpl</artifactId>
            </exclusion>
            <exclusion>
                <groupId>xerces</groupId>
                <artifactId>xerces</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-validator</artifactId>
        <version>4.0.2.GA</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.primefaces</groupId>
        <artifactId>primefaces</artifactId>
        <version>6.0</version>
    </dependency>
    <dependency>
        <groupId>commons-io</groupId>
        <artifactId>commons-io</artifactId>
        <version>2.4</version>
    </dependency>
    <dependency>
        <groupId>commons-fileupload</groupId>
        <artifactId>commons-fileupload</artifactId>
        <version>1.3.1</version>
    </dependency>
    <dependency>
        <groupId>commons-codec</groupId>
        <artifactId>commons-codec</artifactId>
        <version>1.10</version>
    </dependency>
    <dependency>
        <groupId>commons-lang</groupId>
        <artifactId>commons-lang</artifactId>
        <version>2.6</version>
    </dependency>
    <dependency>
        <groupId>org.dom4j</groupId> …
Run Code Online (Sandbox Code Playgroud)

jax-rs xerces javax

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

javax Validator 默认递归验证

我有两个类,其中一个嵌套在另一个类中。我想根据我的这种结构反序列化和验证传入的 JSON。我有一个通过以下方式获得的 javax 验证器

Validator validator = Validation.buildDefaultValidatorFactory().getValidator();
Run Code Online (Sandbox Code Playgroud)

后来我做:

Set<ConstraintViolation<Object>> validate = validator.validate(obj);
Run Code Online (Sandbox Code Playgroud)

obj我的反序列化 JSON在哪里。我的嵌套类是

class Foo {

  @Min(5)
  Integer a;

  List<Bar> bars;

  static class Bar {
    @Min(2)
    Integer b;
  }
}
Run Code Online (Sandbox Code Playgroud)

我知道,除非我@Valid在我的List<Bar> bars字段上指定注释,否则validator不会进行递归验证。但是,我希望 的默认行为validator是递归的。

在获取 的实例时有没有办法做到这一点Validator

java validation json javax

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