我过去只使用 Tomcat 和 JSP 页面来执行查询,然后将查询结果分配到数组或对象中,然后通过响应将该数据传递到客户端。
request.setAttribute("errorMessage", "this is error!!");
request.getRequestDispatcher("report.jsp").forward(request, response);
Run Code Online (Sandbox Code Playgroud)
在客户端 jsp 代码中,我可以执行以下操作:
${错误消息}
然后“这是错误!!” 消息就会出现。
我想对 REST JAX-RS GlassFish v3 做同样的事情。
@Path("schedule/test")
@POST
@Consumes("application/x-www-form-urlencoded")
@Produces("application/vnd.ms-excel")
public Object tmpTest(String content) {
try {
//just my method to execute query and get result
Vector out = (Vector)QueryManager.executeQuery;
//if query result is empty, I want user to redirect to report.jsp page
if(out.isEmpty()) {
request.setAttribute("errorMessage", "This is error!!");
request.getRequestDispatcher("report.jsp").forward(request, response);
return null;
}
....continue code......
}
Run Code Online (Sandbox Code Playgroud)
这会导致我从未见过的神秘异常。
java.lang.ClassCastException: $Proxy109 cannot be cast …Run Code Online (Sandbox Code Playgroud) 有人可以解释一下 ATOM 服务和 REST 服务之间的区别吗?
ATOM 服务格式是一种基于 XML 的数据格式,但想知道它与 REST 服务有何不同。
谢谢。
我需要从命令提示符调用 wcf rest 服务。例如,当我输入
C:\Users\Admin>GET http://localhost:63088/RestCatalogService.svc/
Run Code Online (Sandbox Code Playgroud)
它应该返回 GET 在浏览器中以字符串格式返回的任何内容。任何关于如何开始或链接到任何相关资源的想法都会非常有帮助。
带有令牌身份验证+基于角色的授权的Jersey 2.22 API(我保护API的方式基于本文的公认答案:使用JAX-RS和Jersey进行基于REST令牌身份验证的最佳实践。最好在阅读之前阅读它试图理解我的问题):
这是我的web.xml:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<!-- LISTENERS -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>JerseySpringServlet</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>ca.toto.api.filters</param-value>
</init-param>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>ca.toto.api.restapi</param-value>
</init-param>
<init-param>
<param-name>jersey.config.server.provider.classnames</param-name>
<param-value>ca.toto.api.filters.AuthenticationFilter;ca.toto.api.filters.AuthorizationFilter;com.toto.api.restapi.TaskRestService</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>JerseySpringServlet</servlet-name>
<url-pattern>/filters/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>JerseySpringServlet</servlet-name>
<url-pattern>/restapi/*</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)
当我调用任务 Web服务时,流程毫无问题地进入第一个过滤器(AuthenticationFilter)(@Priority(Priorities.AUTHENTICATION)),验证我的令牌,从解码的令牌中获取用户,然后将其注册为委托人然后传入第二个过滤器AuthorizationFilter(@Priority(Priorities.AUTHORIZATION)),在这里我从安全上下文中获取用户,获取其角色,然后检查他是否有权进行调用。如果是,请正常退出过滤器(如果否),请使用javax.ws.rs.container.ContainerRequestContext。abortWith方法发送状态为403的响应:
@Secured
@Provider
@Priority(Priorities.AUTHORIZATION)
public class AuthorizationFilter implements ContainerRequestFilter {
...
try {
boolean isAllowed = false;
// Check if the …Run Code Online (Sandbox Code Playgroud) 我想创建一个路径,接受用逗号分隔的任意数量的ID.它应该接受以下所有内容:
GET /pets/1,2 # returns info about pets with ids 1, 2
GET /pets/4,10,12,124,2 # same, for pets with ids 4, 10, 12, 124, 2
Run Code Online (Sandbox Code Playgroud)
这本书"建立你不会讨厌的api"给了我这个想法.我如何大摇大摆?
我是前端工程师,我们的团队正在将许多旧服务转换为用clojure编写的微服务.我看到的主要问题是,clojure命名约定更喜欢连字符,而不是变量名中的单词.这意味着如果您将变量直接映射到JSON,则任何JS使用者都需要使用括号表示法来访问此数据,例如response ['to-separate-words'].这显然不太理想.我认为这将是一个简单的查找最佳实践,但我一直在寻找一个小时,似乎我阅读的所有文档都避免了这个问题,但使用单个单词.还有其他人处理过此事.
我正在尝试通过约束实现这两个路由:
get "products/:id", to: "products#show", constraints: { id: /\d/ }
get "products/:name", to: "products#search", constraints: { name: /[a-zA-Z]/ }
Run Code Online (Sandbox Code Playgroud)
第一条路由应使用URL触发,localhost:3000/products/3而最后一条应以触发localhost:3000/products/?name=juice。
不起作用,我在这个问题上搜索了很多,但是我似乎找到了Ruby on Rails的第二或第三版的解决方案,并且其中大多数现在已被弃用。
有任何想法吗?谢谢。
我们有一个 Julia 语言计算引擎,我们希望根据来自 HTML 网页的命令触发。
如何从此应用程序连接到 Julia 实例。是否可以通过 REST 服务连接到 Julia?
我正在尝试 GET 对 API 的请求,但一个特殊字符“*”(星号)中断了我的 API 调用,因此它发送的不完整。有什么办法可以逃脱吗?
取而代之的是:
https://rest2.bermanngps.cl/BermannRest/api/enviacomando?tk=3cf40d35c4e48b60e007cdc85f1342f5&comando=%24SRVFFFFFF%2C25%2C1*8F&md5pass=4e1ed8ef96fb83a0a30c39b0019fadc7&user=1017&avserie=12977
Run Code Online (Sandbox Code Playgroud)
这是发送:
https://rest2.bermanngps.cl/BermannRest/api/enviacomando?tk=3cf40d35c4e48b60e007cdc85f1342f5&comando=%24SRVFFFFFF%2C25%2C1
Run Code Online (Sandbox Code Playgroud)
我正在使用改造的 GET 请求方法,使用存储库动态加载查询字符串。我将如何在那里使用 URLEncoder 方法?
https://rest2.bermanngps.cl/BermannRest/api/enviacomando?tk=3cf40d35c4e48b60e007cdc85f1342f5&comando=%24SRVFFFFFF%2C25%2C1*8F&md5pass=4e1ed8ef96fb83a0a30c39b0019fadc7&user=1017&avserie=12977
Run Code Online (Sandbox Code Playgroud) 我遵循了本教程:custom-asp-net-core-middleware-example
现在我想添加一个默认的 REST 中间件,它处理所有带有 JSON 内容的请求,但当我不注册自己的中间件时,找不到来自 ASP.NET 的 REST 中间件。
有人能告诉我如何使用多个中间件,其中一个是 SOAP,另一个是 REST 中间件吗?
这是我注册中间件的代码:
public static class SOAPEndpointExtensions
{
public static IApplicationBuilder UseSOAPEndpoint(this IApplicationBuilder builder)
{
return builder.UseMiddleware<SOAPEndpointMiddleware>();
}
public static IApplicationBuilder UseSOAPEndpoint<T>(this IApplicationBuilder builder, string path, MessageEncoder encoder)
{
return builder.UseMiddleware<SOAPEndpointMiddleware>(typeof(T), path, encoder);
}
public static IApplicationBuilder UseSOAPEndpoint<T>(this IApplicationBuilder builder, string path, Binding binding)
{
var encoder = binding.CreateBindingElements().Find<MessageEncodingBindingElement>()?.CreateMessageEncoderFactory().Encoder;
return builder.UseMiddleware<SOAPEndpointMiddleware>(typeof(T), path, encoder);
}
}
Run Code Online (Sandbox Code Playgroud)
这SOAPEndpointMiddleware.cs与教程中的大致相同。
rest ×10
api ×3
java ×2
android ×1
asp.net-core ×1
atom-feed ×1
c# ×1
clojure ×1
command-line ×1
httprequest ×1
httpresponse ×1
jax-rs ×1
jersey-2.0 ×1
json ×1
jsp ×1
julia ×1
middleware ×1
redirect ×1
retrofit2 ×1
routes ×1
ruby ×1
soap ×1
swagger ×1
wcf ×1