Мой @RequestBody пуст — SpringBoot — Postman

#spring-boot

#весенняя загрузка

Вопрос:

Я проверяю звонок на postman для входа в систему. Но мой запрос не совпадает с RequestBody . Я хочу протестировать аутентификацию jwt.

 package com.test.jwt.api.controller;

import com.test.jwt.api.entity.AuthRequest;
import com.test.jwt.api.util.JwtUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class WelcomeController {

    @Autowired
    private JwtUtil jwtUtil;
    @Autowired
    private AuthenticationManager authenticationManager;

    @GetMapping("/")
    public String welcome() {
        return "Welcome !!";
    }


    @PostMapping("/authenticate")
    public String generateToken(@RequestBody AuthRequest authRequest) throws Exception {
        try {
            
            System.out.println("Appel generate Token" authRequest.getUserName() "/" authRequest.getPassword());
            authenticationManager.authenticate(
                    new UsernamePasswordAuthenticationToken(authRequest.getUserName(), authRequest.getPassword())
            );
        } catch (Exception ex) {
            throw new Exception("inavalid username/password");
        }
        return jwtUtil.generateToken(authRequest.getUserName());
      //  return "toto";
    }
}
 

Запрос авторизации моего класса

 package com.test.jwt.api.entity;

import com.fasterxml.jackson.annotation.JsonProperty;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
public class AuthRequest {

    private String username;
    private String password;
    
    public AuthRequest(String username, String password) {
        System.out.println("TEste");

        this.username = username;
        this.password = password;
    }
    
    public AuthRequest() {
        System.out.println("TEste2");
    }

    public String getUserName() {
        // TODO Auto-generated method stub
        return null;
    }
    public Object getPassword() {
        // TODO Auto-generated method stub
        return null;
    }
    @JsonProperty(value = "username")
    public void setUserName(String username) {
        this.username = username;
    }
    @JsonProperty(value = "password")
    public void setPassword(String password) {
        this.password = password;
    }
}
 

Мой Json

 {
  "username": "user1",
  "password": "pwd1"
}
 

Мой журнал. Данные крадут пустые.

Приложение TEste2 генерирует Токенnull / null

Вы знаете, в чем моя ошибка?

Ответ №1:

Этот POJO — AuthRequest программный результат возвращается null от обоих его получателей. У вас также есть смесь Lombok @Data , а также геттеры ручной работы, которые используют разные имена для полей, и аннотации JSON.

Если вы используете Lombok, то добавьте @GettersAndSetters в класс и удалите все созданные вручную. Аналогично, полностью удалите конструкторы. Вам не нужен параметризованный конструктор, конструктора по умолчанию плюс установщиков должно быть достаточно.

Основная причина этого, по-видимому, заключается в том, что вы добавляете дополнительную реализацию поверх довольно стандартных геттеров и сеттеров, которые могли бы легко входить и выходить из JSON.