Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java liferay spring portal@ResourceMapping可以';t触发不同类型的http方法_Java_Angularjs_Spring_Liferay 6_Thymeleaf - Fatal编程技术网

Java liferay spring portal@ResourceMapping可以';t触发不同类型的http方法

Java liferay spring portal@ResourceMapping可以';t触发不同类型的http方法,java,angularjs,spring,liferay-6,thymeleaf,Java,Angularjs,Spring,Liferay 6,Thymeleaf,我使用Spring、thymeleaf和AngularJS创建了一个liferay portlet应用程序。对于AngularJS和spring之间的通信,我需要创建一些rest调用,这些调用是我使用@ResourceMapping创建的,如下所示。应用程序工作正常,但问题是我不知道如何进行GET,DELETE,PUThttpREST调用,因为@ResourceMapping不允许指定任何方法 @ResourceMapping(value="getUserDetail") public void

我使用SpringthymeleafAngularJS创建了一个liferay portlet应用程序。对于
AngularJS
和spring之间的通信,我需要创建一些rest调用,这些调用是我使用
@ResourceMapping
创建的,如下所示。应用程序工作正常,但问题是我不知道如何进行
GET
DELETE
PUT
http
REST
调用,因为
@ResourceMapping
不允许指定任何方法

@ResourceMapping(value="getUserDetail")
public void userDetail(@RequestParam long userId, ResourceResponse response) throws Exception {
    Users users = new Users(userId);
    // some logic 

    response.setContentType("application/json");
    response.setCharacterEncoding("UTF-8");

    JSON_MAPPER.writeValue(response.getPortletOutputStream(), users);
}
当我使用
@RequestMapping
而不是
@ResourceMapping
时,如下图所示

@RequestMapping(value="getUserDetail", method=RequestMethod.GET)
@ResponseBody
public void userDetail(@RequestParam long userId, ResourceResponse response) throws Exception {
    System.out.println("Got detail request for user with id {} "+ userId);

    // UserDetail userDetail = this.userService.getPortalUserDetail(userId);
    List<String> users = new ArrayList<String>();
    users.add("Manu");
    users.add("Lissie");
    users.add("John");
    response.setContentType("application/json");
    response.setCharacterEncoding("UTF-8");

    JSON_MAPPER.writeValue(response.getPortletOutputStream(), users);
}
谁能告诉我一些解决方法吗

  • 如何使用
    @ResourceMapping
  • 对于
    REST
    调用,我们是否可以在Liferay Spring portlet中使用
    @RequestMapping
    而不是
    @ResourceMapping
  • 我们如何创建基于资源的
    REST
    url,比如
    getUser/12/mumbai
  • 如何将
    REST
    json作为主体而不是请求参数发送
  • 如果您想要创建一个包含完整操作(GET、POST、PUT、DELETE)的RESTAPI,您需要使用
    @RequestMapping

    2. Can we use @RequestMapping instead of @ResourceMapping in Liferay Spring portlet for REST calls
    
    你应该能够使用

    3. How can we create resource based REST urls like getUser/12/mumbai
    
    @RequestMapping(value="getUser/{userId}/mumbai", method=RequestMethod.GET)
    @ResponseBody
    public List<String> userDetail(@RequestParam("userId") long userId) throws Exception {
        System.out.println("Got detail request for user with id {} "+ userId);
    
        //UserDetail userDetail = this.userService.getPortalUserDetail(userId);
        List<String> users = new ArrayList<String>();
        users.add("Manu");
        users.add("Lissie");
        users.add("John");
    
        return users;
    }
    
    4. How can we send REST json as body instead of Request Param
    
        You can use @RequestBody
    
        @RequestMapping(value="saveUser/{userId}", method=RequestMethod.GET)
        @ResponseStatus(HttpStatus.CREATED)
        public void userDetail(@RequestParam("userId") long userId, @RequestBody User user) throws Exception {
            // Logic
        }
    
    3。我们如何创建基于资源的REST URL,如getUser/12/1
    @RequestMapping(value=“getUser/{userId}/mumbai”,method=RequestMethod.GET)
    @应答器
    公共列表userDetail(@RequestParam(“userId”)long userId)引发异常{
    System.out.println(“获取id为{}+userId的用户的详细请求);
    //UserDetail UserDetail=this.userService.getPortalUserDetail(userId);
    列表用户=新建ArrayList();
    用户。添加(“手动”);
    用户。添加(“Lissie”);
    用户。添加(“John”);
    返回用户;
    }
    4.如何将RESTJSON作为主体而不是请求参数发送
    您可以使用@RequestBody
    @RequestMapping(value=“saveUser/{userId}”,method=RequestMethod.GET)
    @ResponseStatus(HttpStatus.CREATED)
    public void userDetail(@RequestParam(“userId”)long userId,@RequestBody User)引发异常{
    //逻辑
    }
    
    如何使用@ResourceMapping创建不同类型的http调用 以下是一些可能对您有所帮助的示例,这就是我如何使用
    @RequestMapping

    // GET
    @RequestMapping(value = "/api/something", method = RequestMethod.GET)
    @ResponseBody
    public boolean getSomething() {
        return "something";
    }
    
    // GET with param
    @RequestMapping(value = "/api/something/{id}", method = RequestMethod.GET)
    @ResponseBody
    public boolean getSomething(@PathVariable("id") Long id) {
        return id;
    }
    
    您可以使用
    RequestMethod.GET
    而不是
    RequestMethod.POST
    RequestMethod.PUT
    RequestMethod.DELETE
    等等

    如何将RESTJSON作为主体而不是请求参数发送 下面是一段代码片段,我目前使用AngularJS前端进行用户注册。它工作正常,我使用@RequestMapping:

    @ResponseBody
        @RequestMapping(value = "/auth/register", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE)
        public ResponseEntity<User> register(@RequestBody User user) {
            user = userService.initUser(user);
            Authentication authentication = securityUserDetailsService.register(user);
            if (authentication != null) {
                SecurityContext context = SecurityContextHolder.getContext();
                context.setAuthentication(authentication);
                User authUser = securityUserDetailsService.getAuthenticatedUser();
                return new ResponseEntity<>(authUser, HttpStatus.OK);
            } else {
                return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
            }
        }
    
    为了使您能够:

    另外,既然你用的是Spring,我想你应该看看和。通过这种方式,您可以将业务模型公开为RESTful端点

    我们如何创建基于资源的REST URL,如getUser/12/1 因此,为了公开这个端点
    getUser/12/mumbai
    ,您应该这样做:

    // mumbai hardcoded
    @RequestMapping(value = "/getUser/{id}/mumbai", method = RequestMethod.GET)
    @ResponseBody
    public User getUser(@PathVariable("id") Long id) {
        // go get the user ...
        return user;
    }
    
    // mumbai as a param
    @RequestMapping(value = "/getUser/{id}/{prop}", method = RequestMethod.GET)
    @ResponseBody
    public User getUser(@PathVariable("id") Long id, @PathVariable("prop") String prop) {
        // go get the user ...
        return user;
    }
    

    最后,你能试着换一下吗

    public void userDetail (...
    
    对此

    public ResponseEntity<userDetail > (...
    
    公共响应(。。。
    
    模式映射冲突异常

    问题没有显示它,但您的控制器可能有
    @RequestMapping(“视图”)
    注释。此类型级别的映射与方法级别的映射冲突。您应该删除控制器类上的
    @RequestMapping
    注释

    请求映射示例

    @Controller
    public class SampleRESTFullController {
    
    // Simple GET
    @RequestMapping(value = "/helloSample", method = RequestMethod.GET)
    @ResponseStatus(HttpStatus.OK)
    public @ResponseBody List<HelloSample> helloSample() { ... }
    
    // GET with path variable
    @RequestMapping(value = "/helloSample/sampleId/{sampleId}", method = RequestMethod.GET)
    public @ResponseBody HelloSample helloSample(@PathVariable("sampleId") Long sampleId) { ... }
    
    // POST with @RequestBody
    @RequestMapping(value = "/helloSample", method = RequestMethod.POST)
    @ResponseStatus(HttpStatus.CREATED)
    public @ResponseBody HelloSample createSample(@RequestBody HelloSample helloSample) { ... }
    
    // PUT with path variable and @RequestBody
    @RequestMapping(value = "/helloSample/sampleId/{sampleId}", method = RequestMethod.PUT)
    @ResponseStatus(HttpStatus.NO_CONTENT)
    void update(@PathVariable("sampleId") long sampleId, @RequestBody HelloSample helloSample) { ... }
    
    // DELETE
    @RequestMapping(value = "/helloSample/sampleId/{sampleId}", method = RequestMethod.DELETE)
    @ResponseStatus(HttpStatus.NO_CONTENT)
    void delete(@PathVariable("sampleId") long sampleId) { ... }
    
    }
    
    @控制器
    公共类采样器控制器{
    //简单获得
    @RequestMapping(value=“/helloSample”,method=RequestMethod.GET)
    @ResponseStatus(HttpStatus.OK)
    public@ResponseBody List helloSample(){…}
    //获取路径变量
    @RequestMapping(value=“/helloSample/sampleId/{sampleId}”,method=RequestMethod.GET)
    public@ResponseBody HelloSample HelloSample(@PathVariable(“sampleId”)Long sampleId){…}
    //使用@RequestBody发布
    @RequestMapping(value=“/helloSample”,method=RequestMethod.POST)
    @ResponseStatus(HttpStatus.CREATED)
    public@ResponseBody HelloSample createSample(@RequestBody HelloSample HelloSample){…}
    //使用路径变量和@RequestBody放置
    @RequestMapping(value=“/helloSample/sampleId/{sampleId}”,method=RequestMethod.PUT)
    @ResponseStatus(HttpStatus.无内容)
    无效更新(@PathVariable(“sampleId”)长sampleId,@RequestBody HelloSample HelloSample){…}
    //删除
    @RequestMapping(value=“/helloSample/sampleId/{sampleId}”,method=RequestMethod.DELETE)
    @ResponseStatus(HttpStatus.无内容)
    void delete(@PathVariable(“sampleId”)long sampleId){…}
    }
    
    我从博客文章中选取了这些示例。它回答了您所有的问题,并提供了大量示例。请注意Spring配置,它使RESTful服务成为可能(尤其是视图解析器和消息转换器)

    有以下方法可以将rest应用程序与angular js一起使用

    并使用以下javascript与spring控制器通信

    var formData={
    “用户名”:“Vasim”,
    “密码”:“123456”,
    “roleName”:“管理员”
    };
    var响应=$http.post('add',formData);
    response.success(函数(数据、状态、标题、配置){
    $scope.message=数据;
    });
    var formData={
    “用户名”:“Vasim”,
    “密码”:“123456”,
    “roleName”:“管理员”
    };
    var响应=$http.put('edit',formData);
    response.success(函数(数据、状态、标题、配置){
    $scope.message=数据;
    });
    $scope.delete=函数(employeeId){
    $http['delete']('delete'{
    参数:{
    “employeeId”:employeeId
    }
    }).
    成功(功能(数据){
    $scope.msg=数据;
    });
    $http.get('get',{params:{
    “id”:id
    }
    }).成功(功能(数据){
    
    $scope.employees=data;
    当我尝试时with@RequestMapping我得到了org.springframework.beans.fac
    // mumbai hardcoded
    @RequestMapping(value = "/getUser/{id}/mumbai", method = RequestMethod.GET)
    @ResponseBody
    public User getUser(@PathVariable("id") Long id) {
        // go get the user ...
        return user;
    }
    
    // mumbai as a param
    @RequestMapping(value = "/getUser/{id}/{prop}", method = RequestMethod.GET)
    @ResponseBody
    public User getUser(@PathVariable("id") Long id, @PathVariable("prop") String prop) {
        // go get the user ...
        return user;
    }
    
    public void userDetail (...
    
    public ResponseEntity<userDetail > (...
    
    @Controller
    public class SampleRESTFullController {
    
    // Simple GET
    @RequestMapping(value = "/helloSample", method = RequestMethod.GET)
    @ResponseStatus(HttpStatus.OK)
    public @ResponseBody List<HelloSample> helloSample() { ... }
    
    // GET with path variable
    @RequestMapping(value = "/helloSample/sampleId/{sampleId}", method = RequestMethod.GET)
    public @ResponseBody HelloSample helloSample(@PathVariable("sampleId") Long sampleId) { ... }
    
    // POST with @RequestBody
    @RequestMapping(value = "/helloSample", method = RequestMethod.POST)
    @ResponseStatus(HttpStatus.CREATED)
    public @ResponseBody HelloSample createSample(@RequestBody HelloSample helloSample) { ... }
    
    // PUT with path variable and @RequestBody
    @RequestMapping(value = "/helloSample/sampleId/{sampleId}", method = RequestMethod.PUT)
    @ResponseStatus(HttpStatus.NO_CONTENT)
    void update(@PathVariable("sampleId") long sampleId, @RequestBody HelloSample helloSample) { ... }
    
    // DELETE
    @RequestMapping(value = "/helloSample/sampleId/{sampleId}", method = RequestMethod.DELETE)
    @ResponseStatus(HttpStatus.NO_CONTENT)
    void delete(@PathVariable("sampleId") long sampleId) { ... }
    
    }
    
    @RequestMapping(value = "/saveuser", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE)
    @RequestMapping(value = "/getemployee", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
    @RequestMapping(value = "/editCountry", method = RequestMethod.PUT)
    @RequestMapping(value = "/deleteCountry", method = RequestMethod.DELETE)