java - RestEasy:如果字符串有空格,@PathParam 返回第一个单词

标签 java jboss jax-rs resteasy wildfly

我的 API 端点看起来像

@GET
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
@Path("groups/{groupName}")
public Response getCategoriesByGroupName(@PathParam("groupName") @Nonnull final String groupName) {
    return Response.ok(getCategoryTO().getCategoriesByGroupName(categoryManager, groupName)).build();
}

当我尝试到达端点时

curl -H"Content-Type: application/json" -H"BEARER:792345452:78f7f8a4-a8c9-454a-93a8-6633a1076781:169000000"  "https://myapp.com/rest/categories/groups/Utilities"

我得到了正确的 JSON,这意味着 groupName 已正确替换为 Utilities

但是当我这样做时

curl -H"Content-Type: application/json" -H"BEARER:792345452:78f7f8a4-a8c9-454a-93a8-6633a1076781:169000000"  "https://myapp.com/rest/categories/groups/Food & Drink"

我看到服务器错误为

Caused by: javax.ejb.EJBException: javax.persistence.NoResultException: no categories exists with groupName: Food

问题是 groupName 被替换为 Food 而不是 Food & Drink

我尝试使用其他groupName,并意识到每当我的groupName有空格时,只有第一个单词被替换为groupName

如何解决此问题,以便 URL 中传递的整个字符串变为 groupName

我的服务器部署在Wildfly 8

最佳答案

这与我的端点无关。

正如 @Sotirios 所提到的,我需要在将 URL 发送到服务器之前对其进行编码。

当我这样做时,事情开始起作用

curl -H"Content-Type: application/json" -H"BEARER: 792345452:78f7f8a4-a8c9-454a-93a8-6633a1076781:169000000"  "https://myapp.com/rest/categories/groups/Food%20%26%20Drink"

[{"id":"9b1e97f2-ac7d-4caf-85fc-476cd97dd6cb","name":"Alcohol & Bars","groupName":"Food & Drink"}]

关于java - RestEasy:如果字符串有空格,@PathParam 返回第一个单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27196862/

相关文章:

java - System.getenv() 返回\

javaFX 场景生成器。 APP 没有响应,无法向右增长

java - jls7 通用内部类文档错误

java - 使用 JBOSS 开发人员工作室部署 Web 服务时,Java8 和 JBoss EAP 7 是否存在严重的兼容性问题

java - JAX-RS 资源作为 POJO 与 CDI 与 EJB

java - Firebase Firestore 集合的最大值

java - 带 https 的 jboss eap jax-ws 客户端失败

java - 无法实例化驱动程序类 "com.mysql.cj.jdbc.Driver": when deploying war file in jboss

http - @Consumes 中的 charset=utf-8 不起作用

jersey - 包 javax.annotation.security 不存在