免责声明:我确实搜索了这个问题的答案,是的,我确实找到了另一个问题:https://stackoverflow.com/questions/10315728/how-to-send-parameters-as-formparam-to-webservice.但首先,这个问题是询问Javascript,而我问的是Java,其次,它无论如何都没有答案.所以关于这个问题......
使用RESTful服务,将@QueryParams 传递到@GET服务中相当容易,因为您可以简单地将变量名称/值对附加到URL并使用它从程序中命中服务器.有没有办法用@FormParams 做这个?
例如,假设我有以下RESTful服务:
@POST
@Produces("application/xml")
@Path("/processInfo")
public String processInfo(@FormParam("userId") String userId,
@FormParam("deviceId") String deviceId,
@FormParam("comments") String comments) {
/*
* Process stuff and return
*/
}
Run Code Online (Sandbox Code Playgroud)
...让我说我的程序中的其他地方还有另一种方法,如下所示:
public void updateValues(String comments) {
String userId = getUserId();
String deviceId = getDeviceId();
/*
* Send the information to the /processInfo service
*/
}
Run Code Online (Sandbox Code Playgroud)
如何在第二种方法中执行注释掉的操作?
注意:假设这些方法不在同一个类或包中.还假设RESTful服务托管在与运行方法的计算机不同的服务器上.因此,您必须访问该方法并以RESTful方式传递值.
谢谢您的帮助!
我一直在玩这个,到目前为止我还没有找到任何隐藏或欺骗instanceof返回的方法false通过混淆层隐藏它的类型来,但这并不意味着这是不可能的,因为我远离最了解 Java 的人。所以特地来请教专家。
我尝试了以下组合,在每种情况下,instanceof操作员都能够识别对象的真实/基本类型。
public class Test {
public static void main(String[] args) {
Object o = new TestObject();
printType("Base Class", o);
o = (TestSuperObject)(new TestObject());
printType("Super Class", o);
o = (TestInterface)(new TestObject());
printType("Interface", o);
o = (TestInterface)((TestSuperObject3)(new TestObject3()));
printType("Interface on Super Class", o);
o = (TestSuperObject3)((TestInterface)(new TestObject3()));
printType("Super Class on Interface", o);
}
private static void printType(String testCase, Object o) {
System.out.println(testCase);
System.out.println("TestObject:" + (o instanceof TestObject));
System.out.println("TestObject2:" + (o instanceof TestObject2));
System.out.println("TestObject3:" …Run Code Online (Sandbox Code Playgroud) 当我尝试执行以这种方式构造的代码时,我一直收到406 HTTP响应.我已经尝试过多次重构代码和输入,但是我仍然收到这个错误,而且我已经达到了我甚至不知道要调试什么的程度.异常似乎表明该post()方法不是@FormParam以所需格式提供s,但正如您所看到.accept(MediaType.APPLICATION_FORM_URLENCODED)的@Consumes(MediaType.APPLICATION_FORM_URLENCODED)那样,确实匹配.
我使用Firefox附加HTTPRequester传入@FormParams并确保我使用适当的Content-Type(application/x-www-form-urlencoded)传递它们.我已经没有东西要检查了.有没有人有任何想法?
代理服务
Client client = Client.create();
WebResource service = client.resource(myURL);
Form form = new Form();
form.add("value1", value1);
form.add("value2", value2);
form.add("valueN", valueN);
String returnValue = service.accept(MediaType.APPLICATION_FORM_URLENCODED).post(String.class, form);
Run Code Online (Sandbox Code Playgroud)
实际服务
@POST
@Produces(MediaType.APPLICATION_XML)
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
@Path("/theService")
public String theService(
@FormParam("value1") String value1,
@FormParam("value2") String value2,
@FormParam("valueN") String valueN) {
String returnValue = null;
/*
* Do Stuff
*/
return returnValue;
}
Run Code Online (Sandbox Code Playgroud)
例外
com.sun.jersey.api.client.UniformInterfaceException: POST http://theURL/theService returned a response status …Run Code Online (Sandbox Code Playgroud) 目标:每5秒监视5个json URL,其中5个线程并行运行.
我想运行多个并行线程来监视JSON URL,每个时间间隔为n秒.我正在使用ScheduledExecutorService这个.
ScheduledExecutorService executor = Executors.newScheduledThreadPool(5);
for(NetworkBwXmlObject x : xmlDsList) {
executor.scheduleAtFixedRate(new processJsonUrl(x.getJsonUrl(),x.getId(), ctx), 0, 5, TimeUnit.SECONDS);
}
class processJsonUrl implements Runnable {
}
Run Code Online (Sandbox Code Playgroud)
这是创建5个线程来监控5个URL的正确方法.我不想在这里使用线程池.所有5个线程必须处于活动状态,直到应用程序的生命周期.
可以ScheduledExecutorService帮助我的方案或有另一种方法来实现这一目标?
谢谢
java concurrency multithreading executorservice scheduledexecutorservice
我最近在一些代码中看到一些内容,这让我很好奇它是否真的具有某种优化或性能影响。常量文件中有这样一行:
public static final Object NULL = null;
Run Code Online (Sandbox Code Playgroud)
然后,在整个代码中,null将使用 来引用它,而不是显式使用关键字Constants.NULL。
我以前见过这样的事情:
public static final String EMPTY_STRING = "";
Run Code Online (Sandbox Code Playgroud)
""...如果试图避免创建大量重复实例,这似乎至少有一点意义。但它真的有什么区别吗null,因为它实际上不是任何类型的对象?我有什么遗漏的吗?
我安装了MongoDB,并将其设置为windows服务.当我尝试设置replicaSet时,我收到错误"通常只允许使用每个套接字地址(协议/网络地址/端口).对于socket:0.0.0.0:27017".
所以,我已经停止了Windows服务并设置了replicaSet.replicaSet现在正常工作.但是,我没有看到Windows服务正常运行.这是否意味着我无法同时设置replicaSet和MongoDB服务?
我正在寻找一种更好的方法来使用Java在我的LAN网络中获取计算机名称.我试过了:
byte[] ip = {(byte)192,(byte)168,(byte)178,(byte)1};
for(int i=1;i<255;i++)
{
ip[3] = (byte)i;
try
{
InetAddress addr = InetAddress.getByAddress(ip);
String s = addr.getHostName();
System.out.println(s);
}
catch(UnknownHostException e)
{
System.out.println(e.getMessage());
}
}
Run Code Online (Sandbox Code Playgroud)
......但它太慢了.还有其他方法吗?
我在Windows上.
任何想法都表示赞赏.
我知道final关键字在方法上的一个用途是强制子类使用相同的方法实现.但是,通过允许编译器将对方法的调用转换为内联java代码来提高效率意味着什么呢?我刚看过这个,但不太明白这个想法.
在这种程度上,我不理解内联Java代码的含义.如何final执行对方法的调用?在编译调用final方法的代码的过程中,Java是否有任何特殊的通知或做什么?
我有一个叫做类的类Entity,它是abstract我在整个程序中使用的许多其他对象的超类(对于这个例子,Apple类).
在许多方法中,我通过打印打印语句的类名来打印调试语句,然后是实际的调试消息.然而,令我惊讶的是,当我从一个实例调用继承的方法时Apple,Apple打印的是类名而不是类名Entity(这是方法实际所在的位置).
为了获得一个更容易发布代码片段的相关示例,我已经覆盖了toString()这样:
public abstract class Entity {
private String name;
@Override
public String toString() {
return getClass().getSimpleName() + " " + (name != null ? name : super.hashCode());
}
}
Run Code Online (Sandbox Code Playgroud)
因为我没有在Apple类中进一步覆盖此方法,我希望返回的String的第一部分Entity不是Apple.然而它又返回了Apple(对于这个用例来说,它实际上很好用,但仍然有点令人费解).
我尝试查看实现Object#getClass(),但无法将其声明为native方法.
public final native Class<?> getClass();
谁能解释为什么会这样?
如果这很明显,请原谅我,但我对 Python 非常非常陌生。我已经找到了从字典中获取多个键的方法,但这不是我想要做的。
基本上我正在寻找这样的东西:
my_dict = { "1-10" : "foo",
"11-20" : "bar",
# ...
"91-100" : "baz" }
Run Code Online (Sandbox Code Playgroud)
...但其中的键实际上不是字符串,并且给定范围内的任何数字都会映射到该值。例如,my_dict[9]应该返回foo,就像my_dict[3]应该一样。我想过使用显式数组,如下所示,但它不起作用:
my_dict = { [1, 2, 3, ..., 10] : "foo",
Run Code Online (Sandbox Code Playgroud)
我不确定这是否是字典的有效用例,或者是否应该使用其他数据结构。但 Python 有一种总是让我惊讶的方式。那么有人知道 Python 的魔力可以让这项工作发挥作用吗?
java ×8
rest ×2
casting ×1
concurrency ×1
constants ×1
dictionary ×1
final ×1
inheritance ×1
instanceof ×1
jersey ×1
key ×1
keyword ×1
mongodb ×1
null ×1
polymorphism ×1
post ×1
python ×1
replication ×1
web-services ×1