精华内容
下载资源
问答
  • 首先补充一下什么是 Restful ,这里简单说一下,如果一个架构符合REST原则,就称它为RESTful架构。RESTful架构特点:(1)每一个URI代表一...具体介绍参考:一:没有 对象类型 的多参数传递@POST@Path("/addFavor/")vo...

    首先补充一下什么是 Restful ,这里简单说一下,如果一个架构符合REST原则,就称它为RESTful架构。

    RESTful架构特点:

    (1)每一个URI代表一种资源;

    (2)客户端和服务器之间,传递这种资源的某种表现层;

    (3)客户端通过四个HTTP动词,对服务器端资源进行操作,实现"表现层状态转化"。

    具体介绍参考:

    一:没有 对象类型 的多参数传递

    @POST

    @Path("/addFavor/")

    void addFavor(@QueryParam("linkId") String linkId, @QueryParam("userId") List userId,

    @QueryParam("favorTypeCode") String favorTypeCode, @QueryParam("linkTable") String linkTable);

    另一种方式可以通过 @PathParam 注解参数,这种方式要在 URL 地址后面声明 如:/{id},多参:/{id}{aaa}{bbb}

    @GET

    @Path("/{id}")

    @ApiMethod(path = "/api/rest/category/{id}", verb = ApiVerb.GET, description = "get category by id", produces = { MediaType.APPLICATION_JSON }, consumes = { MediaType.APPLICATION_JSON })

    @ApiResponseObject

    Category get(@ApiPathParam(name = "id", description = "The Category id") @PathParam("id") String id);

    二:包含 对象类型 的多参传递

    需要在对象前声明 @ApiBodyObject

    @POST

    @Path("/addFavor/")

    void addFavor(@QueryParam("linkId") String linkId, @ApiBodyObject User user,

    @QueryParam("favorTypeCode") String favorTypeCode, @QueryParam("linkTable") String linkTable);

    @ApiBodyObject 相当于 SpringMVC 的 @RequestBody

    参数注解的作用就是将 xml/json (具体那种看配置,cxf 是json) 转换为实体对象如 User 传递给实现方法,如下:

    @Override

    @Transactional(readOnly = false)

    public void addFavor(String linkId, User user, String favorTypeCode, String linkTable) {

    }

    三:多 对象参数 传递

    Restful 仅支持多个参数中,最多只能有一个是对象参数,就比如一个 Form 表单中只能提交一个对象

    解决办法:将多个对象参数封装到一个大对象中,比如新建一个 VO 把这些对象参数都放进去,或者放到Map,List 这些也行

    四:Jersey

    上面的代码基于 Jersey框架实现,下面来说说 Jersey与 RESTful的关系:

    开发 RESTful WebService 意味着支持在多种媒体类型以及抽象底层的客户端-服务器通信细节,如果没有一个好的工具包可用,这将是一个困难的任务

    为了简化使用Java开发 RESTful WebService 及其客户端,一个轻量级的标准被提出:JAX-RS API

    Jersey RESTful WebService框架是一个开源的、产品级别的JAVA框架,支持JAX-RS API并且是一个JAX-RS(JSR 311和 JSR 339)的参考实现

    Jersey不仅仅是一个JAX-RS的参考实现,Jersey提供自己的API,其API继承自JAX-RS,提供更多的特性和功能以进一步简化RESTful service和客户端的开发

    Reference:

    展开全文
  • 业务场景我们想要统计热点请求URL,进而进行分析优化方案通过过滤器获取到请求url(调用方法request.getservletpath),通过redis进行记录,最后做统计分析问题由于存在部分restful风格的url(通过url进行参数传递),这就...

    昨天遇到这样一个问题,先简单介绍下.

    业务场景

    我们想要统计热点请求URL,进而进行分析优化

    方案

    通过过滤器获取到请求url(调用方法request.getservletpath),通过redis进行记录,最后做统计分析

    问题

    由于存在部分restful风格的url(通过url进行参数传递),这就导致不同的参数获取到的url不同的问题,显然这不是我们想要的

    思路

    因为控制层解析restful风格的传参,用到了注解@PathVariable,所以考虑通过获取请求方法上的@PathVariable注解的数量,进而获取到参数的数量(二者相等,当然这要求规范编码~),然后截取url得到真正需要的url

    解决方案:

    private String getRealUrl(Object handler,String url){

    Annotation[][] parameterAnnotations = ((HandlerMethod) handler).getMethod().getParameterAnnotations();

    int i = 0;

    for (Annotation[] annotations : parameterAnnotations) {

    for (Annotation annotation : annotations) {

    if(annotation instanceof PathVariable){

    i++;

    break;

    }

    }

    }

    if (i == 0){

    return url;

    }

    List split = Arrays.asList(url.split("\\/"));

    List subList = split.subList(0, split.size() - i);

    String join = Joiner.on("/").join(subList);

    return join;

    }

    展开全文
  • 昨天遇到这样一个问题,先简单介绍下. 业务场景 ...由于存在部分restful风格的url(通过url进行参数传递),这就导致不同的参数获取到的url不同的问题,显然这不是我们想要的 思路 因为控制层解析restful风格...

    昨天遇到这样一个问题,先简单介绍下.

    业务场景

    我们想要统计热点请求URL,进而进行分析优化

    方案

    通过过滤器获取到请求url(调用方法request.getservletpath),通过redis进行记录,最后做统计分析

    问题

    由于存在部分restful风格的url(通过url进行参数传递),这就导致不同的参数获取到的url不同的问题,显然这不是我们想要的

    思路

    因为控制层解析restful风格的传参,用到了注解@PathVariable,所以考虑通过获取请求方法上的@PathVariable注解的数量,进而获取到参数的数量(二者相等,当然这要求规范编码~),然后截取url得到真正需要的url

    解决方案:

    private String getRealUrl(Object handler,String url){
            Annotation[][] parameterAnnotations = ((HandlerMethod) handler).getMethod().getParameterAnnotations();
            int i = 0;
            for (Annotation[] annotations : parameterAnnotations) {
                for (Annotation annotation : annotations) {
                    if(annotation instanceof PathVariable){
                        i++;
                        break;
                    }
                }
            }
            if (i == 0){
                return url;
            }
            List<String> split = Arrays.asList(url.split("\\/"));
            List<String> subList = split.subList(0, split.size() - i);
            String join = Joiner.on("/").join(subList);
            return join;
    }

    转载于:https://www.cnblogs.com/beyond-MS/p/10797490.html

    展开全文
  • 问题:在Ajax中,采用Restful风格PUT和DELETE请求传递参数无效,传递到后台的参数值为null原因: * Tomcat * 1.将请求体中的数据,封装成一个map * 2.request.getParameter("id")就会从这个map中取值 ...

    问题:在Ajax中,采用Restful风格PUT和DELETE请求传递参数无效,传递到后台的参数值为null

    原因

             * Tomcat

    *       1.将请求体中的数据,封装成一个map
    *       2.request.getParameter("id")就会从这个map中取值
    *       3.SpringMvc封装POJO对象的时候,
    *            会把POJO中每个属性的值进行request.getParamter();

    *  AJAX发送PUT请求引发的
    *     PUT请求,请求体中的数据,request.getParamter()拿不到
    *     Tomcat一看是PUT就不会封装请求体中的数据为map,只有POST形式的请求才封装请求为map

      

    解决方案:   

           1、 能支持直接发送PUT之类请求还要封装请求体中的数据,但是不支持DELETE

          在web.xml中配置上HttpPutFormContentFilter,
           作用:将请求体中的数据解析包装成一个map

           request被重新包装,request.getParameter()被重写,就会从自己封装的map中取数据

           (局限性:仅仅适合表单对象信息的传参,如果是单个信息数据不通过表单,例如,简单传入一个id,来更新特定数据就发现还是无法传参)

    <!-- 将put请求的数据转换成一个Map数据后返回成request,并重写getParmater方法
    	     简要的说:就是把put的数据封装了,并可以用request.getParameter获取属性 -->
    	<filter>
    	 <filter-name>HttpPutFormContentFilter</filter-name>
    	 <filter-class>org.springframework.web.filter.HttpPutFormContentFilter</filter-class>
    	</filter>
    	<filter-mapping>
    	<filter-name>HttpPutFormContentFilter</filter-name>
    	<url-pattern>/*</url-pattern>
    	</filter-mapping>

          配置完后,当更新对象,ajax传参时,直接在参数设置 type:"PUT" 就行。

    2、 支持PUT,DELETE请求

        在web.xml中配置

    <!-- 使用Rest风格的URI 将页面普通的post请求转为指定的delete或者put请求-->
    	<filter>
    	<filter-name>HiddenHttpMethodFilter</filter-name>
    	<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
    	</filter>
    	<filter-mapping>
    	<filter-name>HiddenHttpMethodFilter</filter-name>
    	<url-pattern>/*</url-pattern>
    	</filter-mapping>

      原理是:在Aajx中发送post请求后,带_method参数,将其修改为PUT,或者DELETE请求

    例子:JS代码中该为

    $.ajax({
                       url:"${APP_PATH}/RecordController/record",
                       type:"POST",
                       data:{id :id ,
                           _method:"PUT"},
                       success:function(result){
                           alert("update success");
                       }
                       }); 
     或者在url中加&_method=”PUT”或者&_method=”DELETE”即可
    展开全文
  • 代码: @RequestMapping("/test1/{a}/{b}") public String test1(@PathVariable int a, @PathVariable int b, Model model){ int res=a+b; model.addAttribute("msg",res); return "test";...
  • 1、问题描述:Ajax中Restful风格PUT和DELETE请求传递参数无效或不支持POST方法 浏览器报405错 后台报错: 2、问题排查: 2.1:检查web.xml是否配置:HiddenHttpMethodFilter 配置代码 <filter> ...
  • restful风格的前端传入参数的形式 // 接受前端参数的注解: @PathVariable public String restful(@PathVariable int p1, @PathVariable int p2, Model model){ int sum=p1+p2; // 获取前端传地进来...
  • 在使用Ajax实现Restful的时候,有时候会出现无法Put、Delete请求参数无法传递到程序中的尴尬情况,此时我们可以有两种解决方案:1、使用地址重写的方法传递参数。2、配置web.xml项目环境。 测试的程序为: @...
  • 在使用Ajax实现Restful的时候,有时候会出现无法Put、Delete请求参数无法传递到程序中的尴尬情况,此时我们可以有两种解决方案:1、使用地址重写的方法传递参数。2、配置web.xml项目环境。测试的程序为:@...
  • 在使用RESTful风格不同于普通借口命名的一点是,它规范使用/来表示资源之间的层级关系。 RESTful接口名 普通接口名 接口含义 GET:users GET:users 获取所有用户列表 GET:users/123 GET:users?userId=...
  • RESTful 一种软件架构风格,设计...需要传递数组参数的情况,如果是一般的form表单,可以直接定义参数类型为List即可(不能定义为数组类型,否则只能得到一个null)。示例代码如下: @POST@Path("/user" )public Re...
  • 问题描述:我vue 用 restful 风格传递两个或者更多参数,前端应该怎么写,服务端应该怎么写? 解决方法:前端 【 传递了 3 个参数 】 服务端: 结果:
  • 之前,对同一个数据进行增删改查的操作是这样的,我们传递一个method方法,里面传递 insert 、delete 、update 、 select 四个参数,表示增删改查,后台接收到method数据之后,对其进行判断解析进行不同的操作 ...
  • 开发环境:Tomcat9.0在使用Ajax实现Restful的时候,有时候会出现无法Put、Delete请求参数无法传递到程序中的尴尬情况,此时我们可以有两种解决方案:1、使用地址重写的方法传递参数。2、配置web.xml项目环境。 ...
  • Restful风格

    2020-10-12 20:32:43
    Restful概述 Rest( REpresentational State Transfer) ...(通过路径中的某部分来传递参数) 隐藏资源的访问行为,通过地址无法得知做的是何种操作。(通过请求方式来确定操作行为) 行为约定 GET请求: http://loca
  • 2、 支持PUT,DELETE请求 在web.xml中配置 HiddenHttpMethodFilter org.springframework.web.filter.HiddenHttpMethodFilter HiddenHttpMethodFilter /* 原理是:在Aajx中发送post请求后,带_method参数,将其修改为...
  • RestFul风格传参

    2021-01-04 21:50:27
    RestFul风格就是所有参数都由/传递,而不是传统的?xx&xx形式 例如:写一个Controller: package controller; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import...
  • The usual examples of GET RESTful methods that take a parameter (returning a scalar value rather than a dataset) are shown like so:public string Get(int id){//get and return the value}...where the val...
  • restful风格接口

    千次阅读 2017-12-01 10:59:43
    关于什么是restful接口,资料解释遍地都是,自认为解释不清。...实体封装参数 or 直接传递参数 二,rest风格接口,到底给请求方返回什么?越纯洁越好 or 除了请求json、xml数据还带上状态码,错误信息,成功失败标识。
  • http://localhost:8080/user/getUserDetail/xiao.gang 路径参数中使用了点号“.”,传递进来的参数只有点号前边的字符串xiao,解决办法是在后端请求映射中做如下修改: @RequestMapping(&quot;/user/getUser...

空空如也

空空如也

1 2 3 4 5 6
收藏数 107
精华内容 42
关键字:

restful风格传递参数