当前位置: 首页 > 知识库问答 >
问题:

用@requestparam发布的JSON

拓拔曦
2023-03-14
RequestMapping(value = "/variable/add", method = RequestMethod.POST)
public @ResponseBody
Object addVariable(@RequestBody MyObject myObject) {
    //do something
    return saimVariable;
}
@Around("execution(* pl.my.company.*.*(..))")
public Object advice(ProceedingJoinPoint joinPoint) {
    ServletRequestAttributes t = (ServletRequestAttributes) RequestContextHolder
            .currentRequestAttributes();
    HttpServletRequest request = t.getRequest();

    String username = (String) request.getParameter("username");
    System.out.println("USER : " + username);
    try {
        if (username.equals("myname")) {
            System.out.println("*** ACCESS GRANTED *** ");
            Object response = joinPoint.proceed();
            return response;
        } else {
            System.out.println();
            return "ACCESS DENIED";
        }

    } catch (Throwable e) {
        System.out.println(e.getMessage());
        return "ACCESS DENIED";
    }

}

}

我想要创建REST服务,所以对于securitu,我需要对每个请求进行身份验证,所以我还需要传递一个用户名,而不仅仅是一个JSON。但是我不知道如何做到这一点,因为当我使用@requestparam(“myobject”)而不是@requestbody时,它就不起作用了。所以我的问题是:

我如何在一个POST请求中同时传递JSON和其他参数(字符串、int...等)?

共有1个答案

耿锦
2023-03-14

1)首先,我建议您使用spring-security。为了检查每个请求,spring@preauthorize中有一个注释,它将有助于在处理之前检查每个请求。

2)如果你想使用检查当前登录用户的用户名,那么他们不需要传递两个参数,你可以使用下面的代码检查当前登录用户

    @PreAuthorize("isAuthenticated()") 
    @RequestMapping(value = "/current", method = RequestMethod.GET)
    public @ResponseBody Users getCurrentLoggedInUser() throws Exception {
        Object authenticatorPrincipalObject = SecurityContextHolder.getContext().getAuthentication().getPrincipal();
        String userName = null;
        if(authenticatorPrincipalObject != null && authenticatorPrincipalObject instanceof Users){
            Users authenticatorPrincipal = (Users) authenticatorPrincipalObject;
            userName = authenticatorPrincipal.getUsername();
        }else if(authenticatorPrincipalObject != null){
            userName =  authenticatorPrincipalObject.toString();
        }else{
            return null;
        }
        return userService.getCurrentLoggedInUser(userName);
    }

3)我不认为在一个请求中我们可以同时传递@requestbody和@requestparam.Spring MVC-为什么不能同时使用@requestbody和@requestparam呢

 类似资料:
  • 问题内容: 我有这个控制器方法: 但是,当我向该端点发送发布请求时,得到以下信息 当我从注释中删除params参数时,我得到了一个更一般的错误,它将说它找不到第一个必需的参数(开始),而实际上它与参数end,hours和username一起发送。 如何在Spring MVC中获取方法中的参数? 我在这篇文章中读到了只能用于get方法的内容,但是如果我删除并坚持使用批注的params参数,它仍然无法

  • 2.6.3.应用的发布 Android 与其他平台的一个显著区别就是应用的发布机制。在多数的平台上(比如iPhone),应用的发布都由一个单独的提供商独揽。 而在 Android 中,可以存在很多不同的 Android 商店。 每家商店都可以制定自己的发布条款和提成方式。这一来,就形成了一个提供商之间相互竞争的自由市场。 不过,目前最大的应用市场“Android Market”是Google自己运

  • 问题内容: 如果我有一个类似于以下内容的请求映射: 然后使用以下命令调用此请求: 我收到错误消息 我可以通过停止javascript客户端发送空参数或接受字符串值并仅在未发现空白的情况下进行解析来解决此问题。 更新:spring的更高版本现在实现了最初想要的行为。 我刚刚在spring4.3.5中对此进行了测试,发现该行为实际上实际上会将null值转换为默认值而不会引发NumberFormatEx

  • 问题内容: 我有这个枚举: 我想用作rest请求的参数: 当我发送这些请求时,它工作正常 但是当我发送: /events?sort=somethingElse 我在控制台中收到500条响应和以下消息: 有没有一种方法可以防止spring抛出这些异常并将enum设置为null? 编辑 Strelok接受的答案有效。但是,我决定处理MethodArgumentTypeMismatchException

  • 这就是我如何尝试使用RestTemplate调用服务器, 这就是我如何使用它(用于测试) 我的登录响应类及其子类, null null null null 公共类BaseResponse{ 受保护字符串StatusCode; 我的问题是,1。为什么调用服务器时会出现此错误 信息:org.springframework.beans.factory.support.defaultListableBea

  • 在处理特殊字符时,和有什么区别? 被接受为空格。 在的情况下,被接受为。