【问题标题】:How do I get input from Spring Book REST API如何从 Spring Book REST API 获取输入
【发布时间】:2021-08-10 21:20:16
【问题描述】:

我正在尝试创建一个桌面应用程序,但为了联系数据库和类似的东西,我想使用 REST API,但这是我的第一个 API,我遇到了一些问题,我不知道如何制作,所以当用户发送以下json

{
    "Password": "test"
}

它将使用它作为password 变量

这是我的代码

APIContollers 类

package com.AnonyomailREST.example.rest.Controller;

import com.AnonyomailREST.example.rest.Models.User;
import com.AnonyomailREST.example.rest.Repo.UserRepo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.List;

@RestController
public class APIControllers {

    @Autowired
    private UserRepo userRepo;

    @RequestMapping(value={"/login/{username}", "xyz"}, method={RequestMethod.POST,RequestMethod.PUT, RequestMethod.GET})
    public String login(@RequestParam String password, @PathVariable String username){



            String password = PASSWORD FROM JSON THAT USER SENDS;
            System.out.println(password);
            return("nothing");
        }
    }


}

【问题讨论】:

  • 问题是什么?
  • @Unmitigated 所以我希望能够通过 JSON 传递变量(var 是密码)
  • @Unmitigated Like I want It 这样用户就可以去使用这个 json 到 URL { "password": "test" },然后它会在程序内的所有其他东西上运行它
  • 也许您可以删除与问题无关的内容。问题只是从请求中读取密码,而不是数据库相关的东西,对吧?
  • @thinkgruen 我猜

标签: java json spring-boot rest


【解决方案1】:

要允许@RestController 接受 JSON 负载,我们可以使用属性与预期 JSON 负载键完全相同的 POJO。

@RequestMapping(value={"/login/{username}", "xyz"}, method={RequestMethod.POST,RequestMethod.PUT, RequestMethod.GET})
    public String login(@RequestBody Password password){
            String password = password.getPassword();
            System.out.println(password);
            return("nothing");
        }
    }
class Password {
   private String Password;

   //getters and setters
}

Spring boot 在后台使用 jackson 将 json 有效负载映射到 object/pojo。你可能甚至不需要@RequestBody,但是教程here 提到了它,所以我保留它。

请测试一下。

旁注

  1. 不要通过 HTTP 以纯文本形式发送密码。使用 TLS/HTTPS。
  2. GET 是用于请求资源的 HTTP 动词,不应包含数据。

编辑 - 更新选项 1 以指定 TLS。

【讨论】:

  • 您在上面留下的评论非常有用,非常感谢您
  • 我将如何不以纯文本形式发送密码,我会在 REST API 或实际应用程序中制作某种加密器。我觉得我应该在实际的应用程序中这样做,但我要让我的应用程序开源,所以我觉得这毫无意义,我觉得我不应该在 REST 中这样做,因为它需要一个纯文本密码才能在它真正加密它之前通过它
  • 查看 TLS 是否是一个选项,它不一定是特定于应用程序的实现。在设置和安全文档中,您可以添加此内容。
  • 如果这就是你的意思,我将使用 SSL/TLS
  • 太好了,这就是我想说的。抱歉,消息之前不清楚。为了更清晰,我已对其进行了更新。
猜你喜欢
  • 2014-03-18
  • 2020-05-03
  • 2013-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-27
  • 1970-01-01
相关资源
最近更新 更多