小编ava*_*eme的帖子

如何防止从我的MongoRepository导出某些HTTP方法?

我正在使用spring-data-rest,我有一个像这样的MongoRepository:

@RepositoryRestResource
interface MyEntityRepository extends MongoRepository<MyEntity, String> {
}
Run Code Online (Sandbox Code Playgroud)

我想允许GET方法,但禁用PUT,POST,PATCH和DELETE(只读Web服务).

根据http://docs.spring.io/spring-data/rest/docs/2.2.2.RELEASE/reference/html/#repository-resources.collection-resource,我应该能够这样做:

@RepositoryRestResource
interface MyEntityRepository extends MongoRepository<MyEntity, String> {

    @Override
    @RestResource(exported = false)
    public MyEntity save(MyEntity s);

    @Override
    @RestResource(exported = false)
    public void delete(String id);

    @Override
    @RestResource(exported = false)
    public void delete(MyEntity t);
}
Run Code Online (Sandbox Code Playgroud)

它似乎不起作用,因为我仍然可以执行PUT,POST,PATCH和DELETE请求.

spring spring-data spring-data-rest spring-data-mongodb

25
推荐指数
2
解决办法
8646
查看次数

Restlet服务器套接字超时

我有一个客户端向服务器发出请求,这可能需要一些时间来响应.

当服务器想要回复时,它抛出以下异常:

连接断了.它可能被客户关闭了.

位于org.eclipse.jetty.http.AbstractGenerator.blockForOutput(AbstractGenerator.java:512)的org.eclipse.jetty.io.nio.SelectChannelEndPoint.blockWritable(SelectChannelEndPoint.java:435)中的org.eclipse.jetty.io.EofException org.eclipse.jetty.server.HttpOutput.write(HttpOutput.java:159)位于org.eclipse.jetty.server.HttpOutput.write(HttpOutput.java:101)的sun.nio.cs.StreamEncoder.writeBytes(StreamEncoder. java:221)sun.nio.cs.StreamEncoder.implWrite(StreamEncoder.java:282)at sun.nio.cs.StreamEncoder.write(StreamEncoder.java:125)at sun.nio.cs.StreamEncoder.write(StreamEncoder) .java:135)at java.io.OutputStreamWriter.write(OutputStreamWriter.java:220)at java.io.Writer.write(Writer.java:157)at org.restlet.representation.StringRepresentation.write(StringRepresentation.java: 237)org.restlet.representation.CharacterRepresentation.write(CharacterRepresentation.java:76)位于org.restlet.engine.adapter.ServerCall.se的org.restlet.engine.adapter.ServerCall.writeResponseBody(ServerCall.java:509)ndResponse(ServerCall.java:453)org.restlet.ext.jetty.internal.JettyCall.sendResponse(JettyCall.java:312)org.restlet.engine.adapter.ServerAdapter.commit(ServerAdapter.java:196)org位于org.eclipse.jetty.server.AbstractHttpConnection.handleRequest的org.restlet.ext.jetty.JettyServerHelper $ WrappedServer.handle(JettyServerHelper.java:170)的.restlet.engine.adapter.HttpServerHelper.handle(HttpServerHelper.java:153) (AbstractHttpConnection.java:452)org.eclipse.jetty.server.AbstractHttpConnection.content(AbstractHttpConnection.java:894)org.eclipse.jetty.server.AbstractHttpConnection $ RequestHandler.content(AbstractHttpConnection.java:948)at org. eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:943)org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:235)org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection. java:77)在org.eclipse.jetty.io.Sele上的org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:622)ctChannelEndPoint $ 1.run(SelectChannelEndPoint.java:46)org.eclipse.jetty.util.thread.QuereadThreadPool.runJob(QueuedThreadPool.java:603)org.eclipse.jetty.util.thread.QueuedThreadPool $ 3.run(QueuedThreadPool. java:538)at java.lang.Thread.run(Thread.java:722)

当发生这种情况时,客户端会无限期挂起.

这是一个重现问题的代码示例:

服务器端:

    public static void main(String[] args) throws Exception  {
        Context context = new Context();
        Server server = new Server(context, Protocol.HTTP, 8182, DummyServerResource.class);
        server.start();
    }

public class DummyServerResource extends ServerResource {

    @Get
    public String retrieve() throws InterruptedException {
        Thread.sleep(1000 * 20);
        return "Dummy";
    }
}
Run Code Online (Sandbox Code Playgroud)

客户端:

public static void main(String[] args) throws …
Run Code Online (Sandbox Code Playgroud)

restlet

5
推荐指数
1
解决办法
4471
查看次数