有没有办法使用javax.validation验证一个名为color的字符串类型的变量,需要使用注释只有这些值(红色,蓝色,绿色,粉红色)?
我所看到的 @size(min=1, max=25)
和@notnull
,但有没有这样的事情@In(red, blue, green, pink)
或多或少类似于In-keyword
用于mysql
基于这个问题,我想基于协商的子协议创建一个服务器端点实例,以不同的方式处理各种协议消息.不幸的是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) 我有一个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) 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)
因此,在对象创建后立即执行检查,但由于从构造函数抛出异常,这是不可能的。
当我的服务器发生内部错误时,如何正确关闭 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) 我正在尝试创建一个非常简单的 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) 我的 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) 关于 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 验证的注释来做到这一点?
在尝试解组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) 我有两个类,其中一个嵌套在另一个类中。我想根据我的这种结构反序列化和验证传入的 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
?