Я пытаюсь отправить запрос PATCH для моего модифицированного API.
Когда я делаю запрос на исправление, API ожидает эту структуру значений.
[
{
"propName":"username","value":"bruno70"
},
{
"propName":"email","value":"[email protected]"
}
]
Итак, в Android studio у меня есть две модели:
UpdateUser, который получает различные требуемые propNames и значения:
public class UpdateUser {
List<UpdateUserzinho> userzinhos;
public void setUserzinhos(List<UpdateUserzinho> userzinhos) {
this.userzinhos = userzinhos;
}
}
Затем у меня есть модель, которая содержит набор имен и значений свойств:
public class UpdateUserzinho {
private String propName;
private String value;
public String getPropName() {
return propName;
}
public void setPropName(String propName) {
this.propName = propName;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}
Итак, мы вставляем все имена и значения свойств в модель UpdateUser, которая вносится в модель пользователя, которая выглядит следующим образом:
public class User {
@SerializedName("_id")
private String id;
@SerializedName("username")
private String username;
@SerializedName("email")
private String email;
@SerializedName("contact")
private String contact;
@SerializedName("zipcode")
private String zipcode;
@SerializedName("userImage")
private String userImage;
@SerializedName("password")
private String password;
@SerializedName("is_admin")
private String isadmin;
public User(String id, String username, String email, String contact, String zipcode, String userImage, String password, String isadmin) {
this.id = id;
this.username = username;
this.email = email;
this.contact = contact;
this.zipcode = zipcode;
this.userImage = userImage;
this.password = password;
this.isadmin = isadmin;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getContact() {
return contact;
}
public void setContact(String contact) {
this.contact = contact;
}
public String getZipcode() {
return zipcode;
}
public void setZipcode(String zipcode) {
this.zipcode = zipcode;
}
public String getUserImage() {
return userImage;
}
public void setUserImage(String userImage) {
this.userImage = userImage;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getIsadmin() {
return isadmin;
}
public void setIsadmin(String isadmin) {
this.isadmin = isadmin;
}
}
Проблема в том, что, хотя я могу успешно объединить значения, выполнив (жестко запрограммированный только для примера):
UpdateUser updateUser = new UpdateUser();
List<UpdateUserzinho> updateUserzinhoList = new ArrayList<>();
String propName1 = "username";
String username = "bruno70";
String email = "email";
UpdateUserzinho updateUsername = new UpdateUserzinho();
updateUsername.setPropName(propName1);
updateUsername.setValue(username);
UpdateUserzinho updateemail = new UpdateUserzinho();
updateemail.setPropName("email");
updateemail.setValue("[email protected]");
updateUserzinhoList.add(updateUsername);
updateUserzinhoList.add(updateemail);
updateUser.setUserzinhos(updateUserzinhoList);
Затем я вызываю на сервер модель updateUser, которая все работает нормально, однако вывод следующий:
{"userzinhos":[{"propName":"username","value":"bruno70"},{"propName":"email","value":"[email protected]"}]}
Итак, API не принимает значения, потому что у него есть "{" userzinhos ":" в начале и "}" в конце. Я должен избавиться от них, чтобы мой API принял значения.
Я попытался преобразовать его в String и отправить строку, преобразованную в JSON, но android автоматически структурирует ее, помещая "\" между интервалами, что приводит к тому, что API не обнаруживает значения.
Я также подумал о том, чтобы иметь безымянный список (если это возможно). Итак, если "userzinhos" не назван каким-либо образом, он технически не будет добавлять значения, о которых я упоминал ранее.
Кроме того, код API, который получает запрос PATCH, выглядит так:
exports.edit_user = (req, res, next) => {
const id = req.params.userId;
const updateOps = {};
for (const ops of req.body) {
updateOps[ops.propName] = ops.value;
}
User.update({ _id: id }, { $set: updateOps })
.exec()
.then(result => {
res.status(200).json({
message: "User updated"
});
})
.catch(err => {
console.info(err);
res.status(500).json({
error: err
});
});
};
Это для школьного проекта.
Вот что такое updateuser или нет? UpdateUser - это в основном список Updateuserzinho
оба отличаются, так как когда у вас есть объект, JSON начинается с {, но со списком / массивом он начинается с [, что вам нужно.
Точно ... Это было "то же самое", только не то. Несколько изменений в коде позволяют мне обновить его сейчас. Спасибо!
Обратите внимание, что здесь мы предпочитаем технический стиль письма. Мы мягко не приветствуем приветствия, надеемся, что вы можете помочь, спасибо, заранее спасибо, благодарственные письма, приветы, добрые пожелания, подписи, пожалуйста, не могли бы вы помочь, болтливые материалы и сокращенные txtspk, мольбы, как долго вы застряли, советы по голосованию, мета-комментарии и т. д. Просто объясните свою проблему и покажите, что вы пробовали, чего вы ожидали и что на самом деле произошло.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вместо UpdateUser вы должны использовать List< UpdateUserzinho> для отправки на сервер.
Пожалуйста, проверьте это изменение, я сделал неверную ссылку ранее. В основном сервер принимает массив / список объектов, хотя то, что вы отправляете, является объектом с ключом «userzinhos», у которого есть требуемый список.
Большое спасибо! Я думал, что делаю то же самое, что теоретически и было, но сервер не принимал это
установите
List<UpdateUserzinho>в качестве тела запроса вместоUpdateUserв вашем интерфейсе модернизации