如何确保网址中没有任何参数?

Jac*_*ack 7 java jsp

我知道如何确保url中是否存在特定参数.我想确保url中没有任何参数,而不仅仅是指定的参数.我怎么能做到这一点?我有一长串参数,并且为所有参数列出条件似乎效率低下.

示例网址是: www.domain.com/Product/UniqueId

由于每个产品都有许多独特的参数,用户可以通过产品页面,独特的代码,独特的供应商,独特的信号,独特的产品等来获得产品页面.

例如:

www.domain.com/Product/UniqueId?code=uniqueCode
www.domain.com/Product/UniqueId?sig=uniqueSig
www.domain.com/Product/UniqueId?pod=uniquepod
www.domain.com/Product/UniqueId?circle=circleNumber&location=Location&color=Color
Run Code Online (Sandbox Code Playgroud)

我发现有关而不是有用的在我的案件的问题是1,2,3,4

我需要在JSP而不是Java中进行此类测试.

mar*_*ace 5

使用URI类可以更容易一些:

import java.net.MalformedURLException;
import java.net.URI;
import java.net.URISyntaxException;

public class UrlTest2
{

   public static void main( String[] args )
           throws MalformedURLException, URISyntaxException
   {
      URI url = new URI( "www.domain.com/Product/UniqueId" );
      System.out.println( url.getQuery() );  // prints "null"
      URI url2 = new URI( "www.domain.com/Product/UniqueId?pod=uniquepod" );
      System.out.println( url2.getQuery() );  // prints "pod=uniquepod"
   }
}
Run Code Online (Sandbox Code Playgroud)

所以如果getQuery()返回null没有参数.否则,有.

关于你的编辑: 嗯,我不建议把代码放在JSP中.现在考虑不好的做法.

但如果你必须,看起来你可以要求所有参数,如果结果是0,则没有任何参数.

<%
   Map params = request.getParameterMap();
   boolean noParams = (params.getSize() == 0);
%>
Run Code Online (Sandbox Code Playgroud)

JSP代码未经测试,但应该给你一个想法.然后,您可以noParams在JSP代码中使用boolean .


And*_*eas 4

跟进

由于必须在 JSP 中完成这一新要求,即使下面原始答案中列出的 Spring 处理程序代码可以添加包含相关信息的 Model 属性,以下是如何做到这一点。

类似的两种方式如下:

<!-- Use the parameter Map -->
<c:if test="${empty param}">
  <!-- no query parameters given -->
</c:if>
Run Code Online (Sandbox Code Playgroud)
<!-- Use the request object -->
<c:if test="${pageContext.request.queryString == null}">
  <!-- no query parameters given -->
</c:if>
Run Code Online (Sandbox Code Playgroud)

原答案

您标记了spring-mvc,所以这意味着您有类似的内容(如果您发布了它那就太好了)

@Controller
public class ProductController {

    @RequestMapping("/Product/UniqueId")
    public String uniqueId(Model model,
                           @RequestParam(path="code"    , required=false) String code,
                           @RequestParam(path="sig"     , required=false) String sig,
                           @RequestParam(path="pod"     , required=false) String pod,
                           @RequestParam(path="circle"  , required=false) String circle,
                           @RequestParam(path="location", required=false) String location,
                           @RequestParam(path="color"   , required=false) String color) {
        // code here
    }
}
Run Code Online (Sandbox Code Playgroud)

以下是检查“无查询参数”的两种方法:

// Get all parameters in a Map
public String uniqueId(Model model,
                       ...,
                       @RequestParam Map<String, String> allParams) {
    if (allParams.isEmpty()) {
        // no query parameters given
    }
    // code here
}
Run Code Online (Sandbox Code Playgroud)
// Use the request object
public String uniqueId(Model model,
                       ...,
                       HttpServletRequest request) {
    if (request.getQueryString() == null) {
        // no query parameters given
    }
    // code here
}
Run Code Online (Sandbox Code Playgroud)

您可能想检查此链接以了解 Spring 可以为您提供的所有各种类型的参数:
http://docs.spring.io/spring-framework/docs/current/spring-framework-reference/html/mvc.html# mvc-ann-参数