我希望能够发送一堆文档到网络服务。这将节省 Http 请求/响应开销,并专注于文档本身。
在 python 中你可以这样做:
r = requests.post('https://stream.twitter.com/1/statuses/filter.json',
data={'track': 'requests'}, auth=('username', 'password'),
stream=True)
for line in r.iter_lines():
if line: # filter out keep-alive new lines
print json.loads(line)
我正在寻找某人将请求流式传输到 Jersey rest api 的示例。我希望看到客户端和服务器端显示它正在工作。但我正在努力寻找一个例子。
理想情况下的示例将显示:
Client:
Open request
Iterate over huge document list
Write document to open request stream
Close request
Server:
@POST method
Open entity stream
Iterate over entity stream while next document is available
Process document
Close entity stream
如果我们做对了,您将在服务器上处理实体,同时仍然在客户端发送它们!巨大的胜利!
最佳答案
完成此操作的最简单方法之一是让 Jersey 为 HTTP POST 主体提供带有 InputStream 的 POST 处理程序。该方法可以使用您选择的 InputStream 和 JSON 解析器来解析然后处理每个对象。
在下面的示例中,Jackson ObjectReader 生成一个 MappingIterator,它在交付时解析和处理数组中的每个 Person 文档到服务器
/**
* Parse and process an arbitrarily large JSON array of Person documents
*/
@Path("persons")
public static class PersonResource {
private static final ObjectReader reader = new ObjectMapper().readerFor(Person.class);
@Path("inputstream")
@Consumes("application/json")
@POST
public void inputstream(final InputStream is) throws IOException {
final MappingIterator<Person> persons = reader.readValues(is);
while (persons.hasNext()) {
final Person person = persons.next();
// process
System.out.println(person);
}
}
}
同样,当配置了 Jackson ObjectMapper 时,Jersey 客户端框架可以发送文档流。以下示例使用 Jersey 测试框架对此进行了演示。客户端流式传输任意大的 Person 文档的迭代器
public class JacksonStreamingTest extends JerseyTest {
@Override
protected Application configure() {
return new ResourceConfig(PersonResource.class, ObjectMapperProvider.class);
}
/**
* Registers the application {@link ObjectMapper} as the JAX-RS provider for application/json
*/
@Provider
@Produces(MediaType.APPLICATION_JSON)
public static class ObjectMapperProvider implements ContextResolver<ObjectMapper> {
private static final ObjectMapper mapper = new ObjectMapper();
public ObjectMapper getContext(final Class<?> objectType) {
return mapper;
}
}
@Override
protected void configureClient(final ClientConfig config) {
config.register(ObjectMapperProvider.class);
}
@Test
public void test() {
final Set<Person> persons = Collections.singleton(Person.of("Tracy", "Jordan"));
final Response response = target("persons/inputstream").request().post(Entity.json(persons.iterator()));
assertThat(response.getStatus()).isEqualTo(204);
}
}
关于java - 将文档流发送到 Jersey @POST 端点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38612843/
是的,我知道最好使用webmock,但我想知道如何在RSpec中模拟此方法:defmethod_to_testurl=URI.parseurireq=Net::HTTP::Post.newurl.pathres=Net::HTTP.start(url.host,url.port)do|http|http.requestreq,foo:1endresend这是RSpec:let(:uri){'http://example.com'}specify'HTTPcall'dohttp=mock:httpNet::HTTP.stub!(:start).and_yieldhttphttp.shou
我知道您通常应该在Rails中使用新建/创建和编辑/更新之间的链接,但我有一个情况需要其他东西。无论如何我可以实现同样的连接吗?我有一个模型表单,我希望它发布数据(类似于新View如何发布到创建操作)。这是我的表格prohibitedthisjobfrombeingsaved: 最佳答案 使用:url选项。=form_for@job,:url=>company_path,:html=>{:method=>:post/:put} 关于ruby-on-rails-rails:Howtomak
如果您尝试在Ruby中的nil对象上调用方法,则会出现NoMethodError异常并显示消息:"undefinedmethod‘...’fornil:NilClass"然而,有一个tryRails中的方法,如果它被发送到一个nil对象,它只返回nil:require'rubygems'require'active_support/all'nil.try(:nonexisting_method)#noNoMethodErrorexceptionanymore那么try如何在内部工作以防止该异常? 最佳答案 像Ruby中的所有其他对象
我真的很习惯使用Ruby编写以下代码:my_hash={}my_hash['test']=1Java中对应的数据结构是什么? 最佳答案 HashMapmap=newHashMap();map.put("test",1);我假设? 关于java-等价于Java中的RubyHash,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/22737685/
我正在阅读SandiMetz的POODR,并且遇到了一个我不太了解的编码原则。这是代码:classBicycleattr_reader:size,:chain,:tire_sizedefinitialize(args={})@size=args[:size]||1@chain=args[:chain]||2@tire_size=args[:tire_size]||3post_initialize(args)endendclassMountainBike此代码将为其各自的属性输出1,2,3,4,5。我不明白的是查找方法。当一辆山地自行车被实例化时,因为它没有自己的initialize方法
rails中是否有任何规定允许站点的所有AJAXPOST请求在没有authenticity_token的情况下通过?我有一个调用Controller方法的JqueryPOSTajax调用,但我没有在其中放置任何真实性代码,但调用成功。我的ApplicationController确实有'request_forgery_protection'并且我已经改变了config.action_controller.consider_all_requests_local在我的environments/development.rb中为false我还搜索了我的代码以确保我没有重载ajaxSend来发送
我正在尝试使用boilerpipe来自JRuby。我看过guide从JRuby调用Java,并成功地将它与另一个Java包一起使用,但无法弄清楚为什么同样的东西不能用于boilerpipe。我正在尝试基本上从JRuby中执行与此Java等效的操作:URLurl=newURL("http://www.example.com/some-location/index.html");Stringtext=ArticleExtractor.INSTANCE.getText(url);在JRuby中试过这个:require'java'url=java.net.URL.new("http://www
我只想对我一直在思考的这个问题有其他意见,例如我有classuser_controller和classuserclassUserattr_accessor:name,:usernameendclassUserController//dosomethingaboutanythingaboutusersend问题是我的User类中是否应该有逻辑user=User.newuser.do_something(user1)oritshouldbeuser_controller=UserController.newuser_controller.do_something(user1,user2)我
什么是ruby的rack或python的Java的wsgi?还有一个路由库。 最佳答案 来自Python标准PEP333:Bycontrast,althoughJavahasjustasmanywebapplicationframeworksavailable,Java's"servlet"APImakesitpossibleforapplicationswrittenwithanyJavawebapplicationframeworktoruninanywebserverthatsupportstheservletAPI.ht
我正在尝试使用Curbgem执行以下POST以解析云curl-XPOST\-H"X-Parse-Application-Id:PARSE_APP_ID"\-H"X-Parse-REST-API-Key:PARSE_API_KEY"\-H"Content-Type:image/jpeg"\--data-binary'@myPicture.jpg'\https://api.parse.com/1/files/pic.jpg用这个:curl=Curl::Easy.new("https://api.parse.com/1/files/lion.jpg")curl.multipart_form_