Интерфейс отправляет данные в формате JSON, но серверная часть получает пустые данные. это отправка данных из внешнего интерфейса.
{
"user": {
"id": 0,
"imgUrl": "default.jpg",
"userName": "d",
"password": "d",
"email": "[email protected]"
},
"verification": "d"
}
это данные, полученные серверной частью. Это скриншот Debug в IDEA. Ожидается, что пользователь и проверка на рисунке получат данные из внешнего интерфейса, но Debug обнаруживает, что их значения равны нулю. Класс User определяется следующим образом
package com.example.back.entity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
private String userName;
private String email;
private String password;
private Integer id;
private String imgUrl;
public User(String name,String password,String email){
this.userName=name;
this.password=password;
this.email=email;
}
}
Далее идет код, в котором возникла проблема.
@PostMapping("/signin")
public Message signIn( User user, String verification) {
if (Boolean.TRUE.equals(redisTemplate.hasKey(user.getEmail())) && Boolean.TRUE.equals(redisTemplate.hasKey(verification))) {
if (redisTemplate.opsForValue().get(user.getEmail()) == verification) {
try {
userMapper.insert(user);
} catch (DuplicateKeyException e) {
return Message.error("用户已注册");
}
user = userMapper.getByEmail(user.getEmail());
String token = JWTUtils.generToken(user.getId());
return Message.success("注册成功", token);
}
}
return Message.error("验证码错误");
}
Я попытался добавить @RequestParam к двум параметрам отдельно, чтобы это исправить, но безуспешно.
Есть 2 ошибки:
@RequestBody
.public class SignIn {
private User user;
private String verification;
//getters and setters
}
В методе-обработчике:
@PostMapping("/signin")
public Message signIn(@RequestBody SignIn signIn) {
...
}
@sleepa while Я не совсем понимаю твой вопрос. Формат того, что вы отправляете из внешнего интерфейса, и объекта, который вы получаете на внутреннем интерфейсе, должен совпадать, и этого нельзя обойти. Если вы не хотите создавать класс, вам необходимо десериализовать в общее соответствие каждый объект — Map<String, Object>
, что на самом деле является неподдерживаемым способом.
Действительно ли это эффективный и удобный способ создать отдельный класс для каждого интерфейса?