在下面的示例中:get to“http://localhost/foo/bar”(已创建状态)的响应位置为“http://localhost/foo/bar/wibble”(请注意/foo/bar)
而get to“http://localhost/foo/baz”(ok status)则响应“http://localhost/wibble”的位置,这正是我们所希望的。
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.core.Response;
import java.net.URI;
@Path("/foo")
public class FooResource {
@POST
@Path("/bar")
public Response bar() {
URI uriOfCreatedResource = URI.create("/wibble");
return Response.created(uriOfCreatedResource).build();
}
@POST
@Path("/baz")
public Response baz() {
URI uriOfCreatedResource = URI.create("/wibble");
return Response.ok().location(uriOfCreatedResource).build();
}
}
以防有人在这里磕磕绊绊地想知道这件事;我深入研究了泽西的代码,看看为什么会发生这种情况。这应该能解释你的问题&卡洛的变通方法。
ContainerResponse包含以下gem:
private void setHeaders(MultivaluedMap<String, Object> headers) {
this.headers = headers;
Object location = headers.getFirst(HttpHeaders.LOCATION);
if (location != null) {
if (location instanceof URI) {
final URI locationUri = (URI)location;
if (!locationUri.isAbsolute()) {
final URI base = (statusType.getStatusCode() == Status.CREATED.getStatusCode())
? request.getAbsolutePath() // WHY!?
: request.getBaseUri();
location = UriBuilder.fromUri(base).
path(locationUri.getRawPath()).
replaceQuery(locationUri.getRawQuery()).
fragment(locationUri.getRawFragment()).
build();
}
headers.putSingle(HttpHeaders.LOCATION, location);
}
}
}
换句话说:出于某种原因,有人认为如果响应状态代码为201,那么以不同的方式处理位置标头是个好主意。正如Carlo注意到的,使用绝对路径可以避免这个问题。
问题内容: 我有一个API调用,我需要对其进行一些检查并可能返回各种状态代码。我不需要自定义视图或任何东西,我只需要返回正确的代码。如果用户未通过适当的凭据,则需要返回401状态。如果他们尚未发送受支持的请求格式,则需要返回400状态。 因为它是一个API,所以我真正想做的就是设置响应状态并以一条简单的愚蠢消息退出,该消息说明请求失败的原因(可能使用)。刚好足以完成工作,但我还无法使其正常工作。我
发生了一些非常奇怪的事情。当我输入时: 输出如下: 输入时: 输出为: 我想使用'jdk1.6.0_24',我改变了'/etc/profile'和'~/. bashrc'中的所有内容,将其指向'jdk1.6.0_24',这样的问题仍然存在。我使用的java仍然是1.8。为什么?
问题内容: 我有正常路线 使用from 。 奇怪的是,这个组件很长一段时间都没有出现问题,但是现在当我用说的时候,它无法在travis- ci上编译 我在我的PrivateRoute组件中设置了此状态,这是带有重定向的非常标准的 如何更新要包含的对象的类型 编辑: 解决方案是添加 复制package.json之后,将其复制到我的Dockerfile中。 问题答案: 看起来您没有对软件包使用锁定文件
我有这个代码: 为了简化它,我想使用方法: 然而,正如您所看到的,当使用方法时,我无法设置响应的状态代码。 有什么办法吗?(不使用自定义扩展功能)
我正在构建一个AWS Lambda函数,它可以动态编译一个类。但是lambda函数抛出错误,因为它无法定位依赖项,即动态编译的类的导入语句。我已经给出了所遵循步骤的示例代码。 请指导我如何定位依赖项,即设置类路径,以便动态创建的类编译时不会出现任何错误 > 正在编译的示例代码 JavaCompilerCode 格拉德尔一个胖罐子 执行lambda函数时出错 要编译的文件保存在 /tmp目录中。我无
Linux CMD