小编cas*_*lin的帖子

同一属性上的不同 Hibernate 验证注释

我在 bean 中的属性上使用两个验证注释:

@NotEmpty(message = "{name.required}")
@Pattern(regex = "^([A-Za-z0-9]{2,}(\\-[a-zA-Z0-9])?)$", message = "{invalid.name}")
private String name;
Run Code Online (Sandbox Code Playgroud)

如果我将名称留空,则会出现两个错误,但我只想要第一个错误消息(如果出现第一个条件,则显示其错误消息,然后跳过第二个条件)。

hibernate hibernate-validator

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

为什么Java语言环境不是常量?

Java支持Locale链接中显示的

但是我无法弄清楚为什么只有法国,加拿大,中国和美国等某些国家/地区以及意大利语,日语和德语等某些语言的语言区域具有常量。

每当需要语言环境时,我都会查询支持的语言环境表,并使用Strings执行以下操作:

Locale locale = new Locale("pt", "BR");
Run Code Online (Sandbox Code Playgroud)

为什么只将某些语言环境作为常量?
是否有Java库可为语言环境提供常量?

java locale

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

如何使用JAX-RS 2.0客户端API发布原始数据

我有一个原始的inputStream,HttpServletRequest我需要使用JAX-RS客户端将收到的整个inputStream以及头文件发送到另一个servlet(实际上).

Client client = ClientBuilder.newClient();

WebTarget reTarget = client.target("http://localhost:8100/Server");
Invocation retargetInvocation = reTarget.request().??
Response.Response response = retargetInvocation.invoke();
Run Code Online (Sandbox Code Playgroud)

我应该如何为post请求进行调用Invocation retargetInvocation = reTarget.request().post(Entity<T>).inputStream可以包含任何Raw数据

jax-rs jersey-client jersey-2.0

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

为JAX-RS 2.0客户端API配置代理

我有一个在Java EE 7应用程序服务器(WildFly)上运行的应用程序,它使用REST资源查询另一个服务.

在以前的应用程序中,我使用了Jersey 1.x客户端API.通过Web代理授予对REST服务的访问权限.

在Jersey中,我创建了Client这样的实例:

public Client create() {

    Client client;
    if ( proxyConfiguration != null && proxyConfiguration.getHost() != null && !proxyConfiguration.getHost().trim().isEmpty() ) {
        HttpURLConnectionFactory urlConnectionFactory = new ProxyUrlConnectionFactory( proxyConfiguration );
        client = new Client( new URLConnectionClientHandler( urlConnectionFactory ), clientConfig );
    } else {
        client = Client.create( clientConfig );
    }

    return client;
}
Run Code Online (Sandbox Code Playgroud)

在Java EE 7应用程序服务器上运行我想使用应用程序服务器提供的JAX-RS 2.0客户端API.

现在我很难找到有关如何以独立于平台的方式配置JAX-RS 2.0客户端的信息.设置http.proxyHosthttp.proxyPort系统属性在WildFly中没有任何效果(我宁愿不在全局配置它).

有谁知道如何解决这个问题?

jax-rs java-ee-7

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

如何使用JAX-RS中的过滤器向HTTP请求添加标头?

我正在通过添加单个标头来修改HttpRequestWebFilterrequest使用HttpServletRequestWrapper实现类:

HeaderMapRequestWrapper requestWrapper = new HeaderMapRequestWrapper(request);
requestWrapper.addHeader(OAuth.OAUTH_ACCESS_TOKEN, accessTokenWord);
chain.doFilter(requestWrapper, response);
Run Code Online (Sandbox Code Playgroud)

doFilter(requestWrapper, response)进行,JAX-RS导致请求到它的资源,其具有@RequestScoped字段:

@Inject
protected HttpServletRequest request;
Run Code Online (Sandbox Code Playgroud)

但是,它不包含任何预期的标头:

@PostConstruct
protected void initialize_resources() throws IllegalStateException {

    this.currentUser = null;
    String accessToken = this.request.getHeader(OAuth.OAUTH_ACCESS_TOKEN);
    AccessToken accessToken = this.memcachedResources.getMemcachedAccessTokenRepository()
                                  .get(accessToken);

    if (accessToken != null && StringUtils.isNotEmpty(accessToken.getUser_id())) {
        this.currentUser = this.em.find(User.class, accessToken.getUser_id());
        this.currentClient = accessToken.getClientId();    
    }
}
Run Code Online (Sandbox Code Playgroud)

所以,this.request.getHeader(OAuth.OAUTH_ACCESS_TOKEN)是的null.

我怎么解决这个问题?

jax-rs java-ee

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

使用Jersey在REST Web服务中返回JSON时,找不到media type = application/json的MessageBodyWriter

我正在尝试使用Jersey创建一个非常简单的REST服务.这是服务代码

@Path("/UserService")
public class UserService {

    @GET
    @Path("/users")
    @Produces(MediaType.APPLICATION_XML)
    public List<User> getUsers() {
        User user = new User(1, "Thomas", "Greene");
        List<User> userList = new ArrayList<User>();
        userList.add(user);
        return userList;
    }
}
Run Code Online (Sandbox Code Playgroud)

当我通过Postman运行它时,它返回一个XML响应

邮递员的XML响应

现在,我希望得到一个JSON响应.所以,我将mediatype更改为application/json:

@Path("/UserService")
public class UserService {

    @GET
    @Path("/users")
    @Produces(MediaType.APPLICATION_JSON)
    public List<User> getUsers(){ 
        User user = new User(1, "Thomas", "Greene");
        List<User> userList = new ArrayList<User>();
        userList.add(user);
        return userList;
   }    
}
Run Code Online (Sandbox Code Playgroud)

它在Tomcat日志中给出了以下错误:

严重:找不到媒体类型= application/json的typeBodyWriter,type = class java.util.ArrayList,genericType = java.util.List.

有人可以指导我如何获得JSON响应吗?

rest json jersey

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

在请求敏感数据时我应该使用GET还是POST?

我应该使用GETPOST检索敏感数据,因为:

  • 响应将包含敏感数据.
  • 请求有副作用(例如显式问责日志记录).

RFC 2616,对我来说,不为我澄清这一点:

9.1.1安全方法

当然,不可能确保服务器不会因执行GET请求而产生副作用; 实际上,一些动态资源会考虑这个功能.这里的重要区别是用户没有请求副作用,因此不能对他们负责.[...]

security rest http

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

使用SAML和ADFS为单点登录创建Java EE应用程序

我将使用ADFS作为身份提供程序(IDP)来实现对Java应用程序的单一登录。通过OneLogin找到了此解决方案SSO,并试用了其示例应用程序。除此之外,还有Shibboleth的另一种解决方案。

我想知道什么是最适合我的情况的解决方案。两者之间,这不是Spring应用程序。

谢谢

saml java-ee single-sign-on

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

如何定义@QueryParam的默认值?

当我在 JAX-RS 中添加字符串的默认值时,它不采用该值。它保持为空或空。

@QueryParam("status")
private String status = "confirmed";
Run Code Online (Sandbox Code Playgroud)

当我将状态传递为空或null或未定义时,它保持为空或null或未定义。它不会将默认值视为已确认。

java jax-rs

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

基本身份验证请求应该是 POST 还是 GET?

我已经看到在GETPOST请求中都完成了基本身份验证。

一方面,我认为浏览器缓存GET请求可能是一个问题,但另一方面:POST更大但鼓励提供敏感信息。

我不是在问GETPOST请求之间的区别,而是应该将哪一个用于基本身份验证。应该GET只与 HTTPS 一起使用吗?应该POST一直使用吗?

我的问题是应该使用哪一个?哪个是更好的做法?

java rest restful-authentication jax-rs basic-authentication

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