#hybris #spartacus-storefront #sap-commerce-cloud
#java #angular #sap-коммерция-облако #spartacus-витрина магазина
Вопрос:
Мне нужно изменить форму регистрации, чтобы отобразить сообщение об ошибке, если на данный адрес электронной почты уже зарегистрирована учетная запись. Серверная часть SAP Hybris, витрина Spartacus в Angular. В настоящее время у меня есть пользовательский класс проверки, который работает правильно:
import org.springframework.util.Assert;
import org.springframework.validation.Errors;
import org.springframework.validation.Validator;
public class EmailExistingValidator implements Validator {
/*
...
*/
@Override
public void validate(Object o, Errors errors) {
Object fieldValue = errors.getFieldValue(this.fieldPath);
if (fieldValue == null || fieldValue instanceof String amp;amp;userIdExists((String) fieldValue)) {
errors.rejectValue(this.fieldPath, "field.required", new String[]{this.fieldPath}, "This email is already in use.");
}
}
}
В этом случае на витрине магазина отображается красное сообщение об ошибке: «UID недействителен», но я хочу изменить его на «Адрес электронной почты недействителен или он уже используется».
Как я могу это сделать?
Поскольку я исследовал проблему, эта строка в витрине магазина происходит из константы с именем ValidationError.invalid.uid, расположенной в файле с именем spartacus-assets.js , вот так:
invalid: {
card_expirationMonth: 'The credit card expiration date entered is not valid.',
firstName: 'First Name entered is not valid.',
lastName: 'Last Name entered is not valid.',
password: 'Password entered is not valid.',
uid: 'UID is not valid.',
},
Насколько я знаю, сообщения о подтверждении и / или ошибках заполняются как-то так (строка 6):
handleValidationError(_request, response) {
this.getErrors(response)
.filter((e) => e.type === 'ValidationError')
.forEach((error) => {
this.globalMessageService.add({
key: `httpHandlers.validationErrors.${error.reason}.${error.subject}`,
}, GlobalMessageType.MSG_TYPE_ERROR);
});
Они доступны из коробки, все расположены в node_modules, поэтому я не могу здесь что-то переписать, потому что после установки npm все они исчезнут.
Возможно ли изменить это сообщение? Есть ли какое-либо решение для решения этой проблемы? Я что-то пропустил или я ошибаюсь? Я приветствую любые комментарии, я очень новичок в SAP Commerce, как вы можете заметить.
Ответ №1:
В настоящее время логика обработки ошибок http централизована в классах HttpErrorHandler s.
Ошибки проверки http обрабатываются общим способом — тип ошибки и сообщение от серверной части преобразуются в ключ перевода интерфейса, затем переводятся для текущего языка и отображаются в компоненте глобального сообщения в интерфейсном интерфейсе. пользовательский интерфейс.
Если вы хотите по-другому обработать какую-то конкретную ошибку из какой-то конкретной конечной точки (например, показать пользовательское сообщение / использовать пользовательский ключ перевода), вы можете расширить метод BadRequestHandler.handleValidationError()
или .handleError()
.
Смотрите исходный код: https://github.com/SAP/spartacus/blob/1b22bf5376c1fc5a88877aaaf4682f1838347b90/projects/core/src/global-message/http-interceptors/handlers/bad-request/bad-request.handler.ts#L64-L78