我有一个调用RESTEasy(JAX-RS)Java服务器的Java客户端.我的一些用户可能拥有比服务器更新版本的客户端.
该客户端可以调用服务器上的资源,该资源包含服务器不知道的查询参数.是否有可能在服务器端检测到这一点并返回错误?
我理解,如果客户端调用尚未在服务器上实现的URL,则客户端将收到404错误,但如果客户端传入未实现的查询参数(例如:),会发生什么?sort_by=last_name?
我今天有人通过以下链接访问我的网站:
www.example.com/pagename.php?_sm_byp=iVVVMsFFLsqWsDL4
Run Code Online (Sandbox Code Playgroud)
有人可以向我解释这是如何工作的,因为我的实际URL结束了pagename.php,我从来没有允许用户输入任何PHP查询,从来没有会话ID或任何类似的东西.
如何queryparam以真正宁静的方式获得春天的宁静网络服务支持......
for example i have url like following
localhost:8080/myapp/booksearch/title/{title}/author/{author}?sortby=relevance&year=2013
title and author I can get by @PathVariable .....
where i want sortby and year optional..
出于实际原因,例如在使用PDO的php中,我经常在准备SQL查询时为参数命名。
那么我可以在node-postgres模块中使用命名参数吗?
现在,我在互联网上看到许多示例和文档,它们显示了如下查询:
client.query("SELECT * FROM foo WHERE id = $1 AND color = $2", [22, 'blue']);
Run Code Online (Sandbox Code Playgroud)
但这也正确吗?
client.query("SELECT * FROM foo WHERE id = :id AND color = :color", {id: 22, color: 'blue'});
Run Code Online (Sandbox Code Playgroud)
或这个
client.query("SELECT * FROM foo WHERE id = ? AND color = ?", [22, 'blue']);
Run Code Online (Sandbox Code Playgroud)
我问这个问题是因为$n在动态构建查询的情况下,带编号的参数对我没有帮助。
是否可以在Jersey中为单个对象/变量允许多个 @QueryParam键?
实际:
@POST
public Something getThings(@QueryParam("customer-number") Integer n) {
...
}
Run Code Online (Sandbox Code Playgroud)
所以,如果我?customer-number=3在URL后添加它的工作原理.
预期:
如果我添加以下任何值,我想得到上面的行为:
?customer-number=3?customerNumber=3?customerNo=3OBS:
该QueryParam注释是这样的:
...
public @interface QueryParam {
String value();
}
Run Code Online (Sandbox Code Playgroud)
所以,它不能接受多个String值(比如@Produces).
下面的方法允许用户同时使用具有相同含义的多个键(并且我希望它们之间具有"OR"条件):
@POST
public Something getThings(@QueryParam("customer-number") Integer n1,
@QueryParam("customerNumber") Integer n2,
@QueryParam("customerNo") Integer n3) {
...
}
Run Code Online (Sandbox Code Playgroud)这样的东西不起作用:
@POST
public Something getThings(@QueryParam("customer-number|customerNumber|customerNo") Integer n) {
...
}
Run Code Online (Sandbox Code Playgroud)我怎样才能做到这一点?
细节:
我正在使用 apache URIBuilder为Rest 服务的GET 方法构建查询字符串。
@RequestMapping(value="/remote")
public Return getTest(Ordine ordine) throws Exception{
...
}
Run Code Online (Sandbox Code Playgroud)
这是输入对象:
public class Ordine{
private List<String> codici;
//..get...set..
}
Run Code Online (Sandbox Code Playgroud)
我无法理解如何将此字符串列表设置为查询参数。
我试图设置参数两次:
URIBuilder builder = new URIBuilder()
.setHost("localhost")
.setPort(8080)
.setScheme("http")
.setPath("/remote")
.setParameter("codici", codicilist.get(0))
.setParameter("codici", codicilist.get(1));
Run Code Online (Sandbox Code Playgroud)
但是第一个参数会被第二个参数覆盖。然后我尝试在参数名称中附加 []:
URIBuilder builder = new URIBuilder()
.setHost("localhost")
.setPort(8080)
.setScheme("http")
.setPath("/remote")
.setParameter("codici[]", codicilist.get(0))
.setParameter("codici[]", codicilist.get(1));
Run Code Online (Sandbox Code Playgroud)
但它只是以名称“codici[]”发送,第一个参数被覆盖。然后我尝试了一个逗号分隔值:
URIBuilder builder = new URIBuilder()
.setHost("localhost")
.setPort(8080)
.setScheme("http")
.setPath("/remote")
.setParameter("codici", String.join(",",codicilist));
Run Code Online (Sandbox Code Playgroud)
但如果失败......我如何设置参数列表?
我想制作一个有 5 个可选查询参数的 API,我想知道是否有更好的方法来处理这个问题,现在我用 if 条件检查每个参数,这有点脏!有什么方法可以在不使用大量 if 条件的情况下处理所有场景?
let songName = req.query.songName
let singerName = req.query.singerName
let albumName = req.query.albumName
let publishDate = req.query.publishDate
if(songName && singerName && albumName && publishDate) {
const response = songs.filter(c => {
return c.songName === songName && c.singerName === singerName && c.albumName === albumName && c.publishDate === publishDate
}
res.send({
"Data" : response
})
}
if(songName && singerName && albumName && !publishDate) {
const response = songs.filter(c => {
return c.songName === songName && …Run Code Online (Sandbox Code Playgroud) 正在开发的应用程序托管在iframe中.
我在我的应用程序中配置了以下路由:
const routes: Routes = [
{
path: '',
pathMatch: 'full',
redirectTo: 'list'
},
{
path: 'list',
component: ListComponent,
canActivate: [CanActivateRoute]
},
{
path: 'dashboard',
loadChildren: './modules/dashboard/dashboard.module#DashboardModule'
}
];
@NgModule({
imports: [RouterModule.forRoot(routes, { enableTracing: true })],
exports: [RouterModule],
providers: []
})
export class AppRoutingModule { }
Run Code Online (Sandbox Code Playgroud)
在ListComponent,OnInit方法,我用下面的代码来获取查询字符串PARAMS:
this.router.events.subscribe(val => {
if (val instanceof RoutesRecognized) {
console.log("val.state.root.firstChild.params: " + val.state.root.firstChild.params);
}
});
const firstParam: string = this.route.snapshot.queryParamMap.get('id');
Run Code Online (Sandbox Code Playgroud)
这些似乎都不起作用.我申请的网址如下:
https://company.com/#/app-dev/list?id=3
QueryParamMap或者RoutesRecongnized似乎没有在url中获取查询字符串"id = 3".它总是返回null.
任何人都可以帮我如何从角度应用程序中的URL检索查询参数/查询字符串?
我们的一个外部 API 使用带有特殊字符的查询参数名称(不要问我为什么,我不知道)。我的这个 API 的假客户端方法声明如下:
@GetMapping("/v1/user/{userId}/orders")
List<Order> getOrders(
@PathVariable("userId") String userId,
@RequestParam("page[number]") Integer pageNumber,
@RequestParam("page[size]") Integer pageSize);
Run Code Online (Sandbox Code Playgroud)
正如我提到的,请求参数包含特殊字符[和]. 我正在使用 Spock 进行测试,我想像这样设置 Wiremock 存根:
wiremock.stubFor(
get(urlPathMatching('/v1/users/' + userId + '/orders'))
.withQueryParam("page[number]", new EqualToPattern("1"))
.withQueryParam("page[size]", new AnythingPattern())
.willReturn(
status(200)
.withHeader("Content-type", "application/json")
.withBody("""[]""")
))
Run Code Online (Sandbox Code Playgroud)
但我得到:
--------------------------------------------------------------------------------------------------
| Closest stub | Request |
--------------------------------------------------------------------------------------------------
|
GET | GET
/v1/users/123/orders | /v1/users/123/orders?page%5Bnumber%5D=%7Bpage%5Bnumber%5
| D%7D&page%5Bsize%5D=%7Bpage%5Bsize%5D%7D
|
Query: page[number] = 1 | <<<<< Query is not present
Query: page[size] [anything] (always) | <<<<< …Run Code Online (Sandbox Code Playgroud) 我使用URLSearchParmasAPI构建了一个带有查询参数的 oauth2 url 。但是,输出 URL 没有返回预期的 URL。任何人都可以帮助我理解这两个API之间的差异,我怎么能得到相同的结果的输出encodeURIComponent,使用URLSearchParams?谢谢!
const expected = encodeURIComponent('code id_token'); // code%20id_token
const search = new URLSearchParams();
search.set('response_type', 'code id_token');
search.toString(); // code+id_token
Run Code Online (Sandbox Code Playgroud) query-parameters ×10
java ×3
rest ×3
jax-rs ×2
node.js ×2
spring ×2
url ×2
angular ×1
angular7 ×1
express ×1
feign ×1
if-statement ×1
javascript ×1
jersey ×1
oauth-2.0 ×1
sql ×1
uribuilder ×1
web-services ×1
wiremock ×1