例如,具有以下Java休息定义:
@GET
@Path("/something")
public String somthing(
@QueryParam("valString") String valString,
@QueryParam("valInt") int valInt,
@QueryParam("valBool") boolean valBool
) {
...
}
Run Code Online (Sandbox Code Playgroud)
并调用:
curl -X GET 127.0.0.1/something
Run Code Online (Sandbox Code Playgroud)
如果未在调用中指定,参数值将是什么?(valString =?,valInt =?,valBool =?)
我正在尝试将此 Google App Engine Maven 服务器存储库重写为 Spring。
我有 URL 映射问题。Maven 回购服务器标准如下所示:
以斜线结尾的 URL 指向一个文件夹,例如:
http://127.0.0.1/testDir/
http://127.0.0.1/testDir/testDir2/
Run Code Online (Sandbox Code Playgroud)所有其他(末尾没有斜线)指向文件,例如:
http://127.0.0.1/testFile.jar
http://127.0.0.1/testFile.jar.sha1
http://127.0.0.1/testDir/testFile2.pom
http://127.0.0.1/testDir/testFile2.pom.md5
Run Code Online (Sandbox Code Playgroud)使用了@javax.ws.rs.Path
与 Spring 不同的支持正则表达式的注释。
我尝试了一堆组合,例如这样的:
http://127.0.0.1/testDir/
http://127.0.0.1/testDir/testDir2/
Run Code Online (Sandbox Code Playgroud)
但是我不知道如何在 Spring 应用程序中以正确的方式做到这一点。
我想避免编写自定义 servlet 调度程序。
我有一个现有的类,我正试图将一些头参数提供给SSO用户进入我们的系统.课程如下.
import java.util.Map;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.HttpHeaders;
import javax.ws.rs.core.MediaType;
import org.springframework.stereotype.Component;
@Component
@Path("/http")
public class HttpResource {
@GET
@Path("/getHeaders")
@Produces(MediaType.APPLICATION_JSON)
public Map<String, String> getAllHeaders(@Context HttpHeaders headers) {
Map<String, String> headerList = new HashMap<String, String>();
for (String key : headers.getRequestHeaders().keySet()) {
String value = headers.getRequestHeader(key).get(0);
System.out.println(key + " : " + value);
headerList.put(key, value);
}
return headerList;
}
}
Run Code Online (Sandbox Code Playgroud)
我想弄清楚的是我如何调用getAllHeaders()
这个@Context
论点?我已经找到了很多我所拥有的课程的例子,但没有说明如何称呼它.
我也尝试将注释放在类中而不是作为参数.
@Context
HttpHeaders httpHeaders;
Run Code Online (Sandbox Code Playgroud)
但是当我尝试访问httpHeaders.getAllHeaders()
它时返回null.我假设因为它实际上并没有创建,因为javax文件说它永远不会返回null.
我试图在我的SSOAuthorizationFilter.java中调用它,但也尝试通过控制器访问它.
我有一个端点:
@Path("/products")
@Produces({ MediaType.APPLICATION_JSON })
public interface Products {
@PUT
@Path("/{productId}")
....
}
Run Code Online (Sandbox Code Playgroud)
我为这个服务实现了一个 jax-rs 客户端,并将它导入到我从中调用它的另一个服务中。
所以我从我的第二个服务中调用客户端如下
public String updateProduct(String productId){
..
return client.target(this.getBaseUrl()).path("products/").path(productId).request(MediaType.APPLICATION_JSON_TYPE).put(Entity.json(""), String.class);
}
Run Code Online (Sandbox Code Playgroud)
如果我有一个带有斜杠的产品,上面写着“控制/注册应用程序”,该服务似乎不太好。我确实在调用服务之前对 productId 进行了编码,然后在收到后对其进行解码。但这似乎不起作用,我找不到 404。有任何想法吗?提前致谢
我正在尝试将jax-rs响应序列化为json字符串.
来自服务器的响应是json,我从泽西客户端获得它:
Response resp = target.request().method("PUT", Entity.json(payloadBean))
Run Code Online (Sandbox Code Playgroud)
其中payloadBean是我的json请求.一切正常但我无法转换json字符串中的resp以便记录它.
如果我尝试:
String s = EntityUtils.toString((HttpEntity) resp.getEntity());
Run Code Online (Sandbox Code Playgroud)
我明白了:
org.glassfish.jersey.client.internal.HttpUrlConnector cannot be cast to org.apache.http.HttpEntity
Run Code Online (Sandbox Code Playgroud)
顺便说一句,如果我没有强制转换为HttpEntity,编译器说:
toString (org.apache.http.HttpEntity) in EntityUtils cannot be applied to (java.lang.Object).
Run Code Online (Sandbox Code Playgroud)
我的相关进口是:
import org.apache.http.HttpEntity;
import org.apache.http.util.EntityUtils;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.Entity;
import javax.ws.rs.client.WebTarget;
import javax.ws.rs.core.Response;
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
javax.ws.rs ×5
java ×4
jax-rs ×2
spring ×2
jersey-2.0 ×1
mapping ×1
queryparam ×1
regex ×1
rest ×1
web-services ×1