使用JSR 311及其实现,我们有一个强大的标准,可以通过Rest公开Java对象.但是在客户端方面似乎缺少可与Apache Axis for SOAP相媲美的东西 - 隐藏Web服务并将数据透明地封送回Java对象.
如何创建Java RESTful客户端?使用HTTPConnection和手动解析结果?或者专业客户,例如Jersey或Apache CXR?
我有一个相对简单的功能,它使用了一个 foreach
function foo($t) {
$result;
foreach($t as $val) {
$result = dosomething($result, $val);
}
return $result;
}
Run Code Online (Sandbox Code Playgroud)
我想输入提示,Traversable
似乎是我需要的确切类型提示
function foo(Traversable $t) {
Run Code Online (Sandbox Code Playgroud)
然而,这给出了E_RECOVERABLE_ERROR
使用数组时(当然可以在a中使用foreach
):例子
Argument 1 passed to foo() must implement interface Traversable, array given
Run Code Online (Sandbox Code Playgroud)
有没有办法输入提示或这是不可能的?
我的Java程序需要同步移动服务器上的文件,即.在同一组本地文件系统中.显而易见的解决方案是使用Files.move().但是,在某些情况下,我已经阅读过,例如.跨文件系统,移动将回退到复制和删除.当我移动大文件时,我希望能够在副本发生时向用户报告进度(因为会有明显的延迟).
但是,我找不到使用Java API执行此操作的简单方法.我可能会编写自己的报告进度的复制例程,但是我需要知道移动是否会产生副本.
一种可能性似乎是这样的:
try {
Files.move(src, dest, CopyOption.ATOMIC_MOVE);
} catch (AtomicMoveNotSupportedException e) {
// Perform a copy instead (and report progress)
}
Run Code Online (Sandbox Code Playgroud)
但是,如果在所有情况下这都是正确的,我不清楚Java doco.这确实是一个正确的解决方案?如果没有,还有另一种方式吗?
我有两个涉及用户定义类型的相关存储过程.第一个接受对象ID并返回用户定义类型的相应实例.第二个接受相同用户定义类型的实例并使用它执行某些操作.
我正在使用Java,JDBC和一些Spring JDBC.我已经成功完成了第一个存储过程,即.我可以从数据库中检索用户定义类型的实例,但是,我无法使第二个存储过程工作.
这是我到目前为止的基本概要:
架构(PL/SQL)
create or replace type example_obj as object
(ID NUMBER,
NAME VARCHAR2(100))
create or replace type example_tab as table of example_obj
create or replace package
example as
procedure getExample
(p_id in number,
p_example out example_tab);
procedure useExample
(p_example in example_tab);
end example;
Run Code Online (Sandbox Code Playgroud)
实体(Java) - 表示Java中的用户定义类型
public class Example {
public BigDecimal ID;
public String Name;
}
Run Code Online (Sandbox Code Playgroud)
Mapper(Java) - 从SQL类型映射到Java类型并返回
public class ExampleMapper extends Example implements SQLData {
public static final String SQL_OBJECT_TYPE_NAME = "example_obj";
public static …
Run Code Online (Sandbox Code Playgroud) 我们使用第三方产品来管理我们的体育中心会员资格.我们有几种会员类型(例如,初级,学生,员工,社区)和几种会员身份(例如,年度,活动,非活动,暂停).不幸的是,该产品仅记录会员当前的会员类型和状态.我希望能够跟踪我们的会员类型和状态随时间变化的方式.
目前,我们可以访问产品的数据库设计.它在SQL Server上运行,我们定期针对产品表运行自己的SQL查询,以生成我们自己的表.然后,我们将表格链接到Excel中的数据透视表以生成图表.所以我们熟悉数据库设计和SQL.但是,我们仍然坚持如何最好地解决这个问题.
该产品记录会员的会员购买情况以及他们的开始和到期日期.因此,我们可以回过头来确定会员在任何时间点的类型和状态.举例来说,如果他们买了在2007年1月1日,一个初级会员,并于2007年12月31日到期,那么他们买了2008年6月1日,一个学生会员,我们可以看到他们的状态,从主动去激活到激活(于扬分别于2008年1月和2008年6月1日),他们的类型从初中到学生(2008年6月1日).
基本上我们希望将成员的类型和状态属性转换为时间属性或有效性 a-la Fowler(或其他随时间变化的事物).
我们的问题(最后:) - 鉴于上述情况:您建议我们使用什么数据库表设计来保存此成员信息.我想它会有一个MemberID列,所以我们可以键入现有的Member表.它还需要存储成员的状态和类型以及他们所持有的日期范围.我们希望能够轻松地针对此表编写查询,以确定在给定时间点我们拥有的每种类型和状态的成员数量.
更新2009-08-25:已经进行了侧面跟踪,并且还没有机会尝试提出的解决方案.希望尽快这样做,并根据结果选择答案.
我有一个基于Java 8 / Spring4的Web应用程序,它向使用某些Javascript并更新进度条的基于浏览器的客户端报告使用服务器发送事件(SSE)的长时间运行过程的进度。在我的开发环境和开发服务器上,SSE几乎实时地到达客户端。我可以看到他们使用Chrome开发器工具(以及它们的时间戳)到达了,进度条也顺利更新。
但是,当我部署到生产环境中时,会观察到不同的行为。在长时间运行的过程完成之前,事件不会到达浏览器。然后它们全部到达一个突发状态(根据开发工具,所有事件的时间戳都在几百毫秒之内)。进度条在整个过程中停留在0%,然后很快迅速跳到100%。同时,我的服务器日志告诉我事件是定期生成和发送的。
这是相关的服务器端代码:
public class LongRunningProcess extends Thread {
private SseEmitter emitter;
public LongRunningProcess(SseEmitter emitter) {
this.emitter = emitter;
}
public void run() {
...
// Sample event, representing 10% progress
SseEventBuilder event = SseEmitter.event();
event.name("progress");
event.data("{ \"progress\": 10 }"); // Hand-coded JSON
emitter.send(event);
...
}
}
@RestController
public class UploadController {
@GetMapping("/start")
public SseEmitter start() {
SseEmitter emitter = new SseEmitter();
LongRunningProcess process = new LongRunningProcess(emitter);
process.start();
return emitter;
}
}
Run Code Online (Sandbox Code Playgroud)
这是相关的客户端Javascript:
EventSource src = new …
Run Code Online (Sandbox Code Playgroud) 我正在尝试处理一个流Integers
并收集与谓词(通过compare()
函数)匹配的整数到列表中.这是我编写的代码的大致轮廓.
private List<Integer> process() {
Z z = f(-1);
return IntStream.range(0, 10)
.filter(i -> compare(z, f(i)))
.collect(Collectors.toCollection(ArrayList::new)); // Error on this line
}
private boolean compare(Z z1, Z z2) { ... }
private Z f(int i) { ... }
Run Code Online (Sandbox Code Playgroud)
不幸的是我的解决方案没有编译,我无法理解突出显示的行的编译器错误:
IntStream类型中的方法collect(Supplier <R>,ObjIntConsumer <R>,BiConsumer <R,R>)不适用于参数(Collector <Object,capture#1-of?,Collection <Object >>)
有什么建议?
我有一组基于Spring的Java Web应用程序和一个公共框架库,可通过JAR文件对它们全部使用。我正在使用Thymeleaf进行查看。
我有一个通用的Thymeleaf模板,供多个Web应用程序使用。模板HTML文件及其关联的样式表都在库JAR文件中。当Web应用程序基于框架模板显示视图时,该模板将由Thymeleaf找到并处理。
我的问题是我无法弄清楚如何导入样式表,以便将样式表加载并传递回浏览器。最终结果是未样式化(尽管正确)的HTML。
我正在使用Gradle作为构建工具。
这是我与框架相关的项目结构:
common-framework/src/main
../java - contains the framework code
../resources - contains the framework resources
../static
../css
example.css - Style sheet for use in templates
../templates
../fwk
example.html - Thymeleaf template
Run Code Online (Sandbox Code Playgroud)
这是示例应用程序的相关项目结构:
app/src/main
../java - contains the application code
../resources - contains the application resources
../templates
../app
start.html - Thymeleaf template
../webapp
../resources
../css
app.css - Style sheet for use in the app
Run Code Online (Sandbox Code Playgroud)
这是ViewResolver bean,应用程序和框架都使用它来定位模板:
@Bean
public ViewResolver viewResolver()
{
ClassLoaderTemplateResolver templateResolver = new ClassLoaderTemplateResolver();
templateResolver.setTemplateMode("HTML5"); …
Run Code Online (Sandbox Code Playgroud) 我有一个工作方法,我想使用lambdas或函数引用更通用.也就是说,对于在我的方法中调用的一些方法,我想将它们指定为我的方法的参数.但是我无法理解它.
假设我有以下基本类结构
class B {}
class C {
public Set<Integer> getIds() { ... }
public void addB(B b) { ... }
}
Run Code Online (Sandbox Code Playgroud)
我有自己的工作方法
private void p1(Map<Integer, C> cs, Map<Integer, B> bs) {
for (C c : cs.values()) {
for (Integer id : c.getIds()) {
if (bs.containsKey(id)) {
c.addB(bs.get(id));
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
这就是所谓的p1(cs, bs);
- 到目前为止一切顺利.
使其更通用的第一步是为getIds()
方法提供lambda .我使用以下方法实现了:
private void p1(Map<Integer, C> cs, Map<Integer, B> bs, Function<C, Set<Integer>> f) {
for (C c : cs.values()) {
for …
Run Code Online (Sandbox Code Playgroud) 我有这张桌子:
Location date temp
1 12-12-2009 19
1 14-12-2009 21
1 13-12-2009 17
2 12-12-2009 18
2 14-12-2009 16
2 18-12-2009 12
2 15-12-2009 14
Run Code Online (Sandbox Code Playgroud)
现在我想为所有位置选择最新的(最新日期)行,所以他的示例第2行和第7行.我该怎么做?
我可以选择最新的1个位置,前1个日期为一个位置,我尝试按位置分组,日期,但后来我想念温度....
亲切的问候,米歇尔
java ×7
java-8 ×2
spring ×2
sql ×2
arrays ×1
client ×1
java-stream ×1
javascript ×1
jdbc ×1
lambda ×1
oracle ×1
php ×1
php-7.1 ×1
rest ×1
spring-jdbc ×1
sql-server ×1
t-sql ×1
thymeleaf ×1