powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Какой код ответа вернуть в HttpServletResponse, если действие над объектом запрещено?
25 сообщений из 58, страница 1 из 3
Какой код ответа вернуть в HttpServletResponse, если действие над объектом запрещено?
    #39772528
Nixic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем, привет!
Есть код (не мой), сейчас появилась задача запретить некое действие над объектом, который в коде получен по id.
Например, Task с неким статусом isRunning == true.
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
	@RequestMapping(path = "/task", method = RequestMethod.DELETE, produces = MediaType.APPLICATION_JSON_VALUE)
	public ResponseOrError deleteTask(@RequestParam String taskId,
									  HttpServletResponse response) {
		try {
                        // вот здесь, допустим проверяем, что мол наша Task не может быть удалена и делаем return
                        Task currentTask = new Task(taskId);
                        if(currentTask.isRunning) {
                            response.setStatus(HttpServletResponse.КАКОЙ_ТО_КОД_ОШИБКИ);
                            return new ErrorMessage(e.getMessage());
                        }
			scheduleExecService.deleteTask(taskId);
			scheduleService.deleteTask(host, sid, taskId, projectName);
		} catch (AppException e) { 
			response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
			return new ErrorMessage(e.getMessage());
		}  
               // ну и тут всякие другие кетчи :)
		return new SuccessMessage();
	}


Меня самого смущает такая конструкция метода, но если её оставлять, то есть не переписывать, чтобы возвращался какой-нибудь объект в виде json со статусом(success=true/false), с кодом(например 200), со значение(value) в виде объекта, ну и с чем-нибудь.
То какой тогда здесь подставить код будет правильнее? (КАКОЙ_ТО_КОД_ОШИБКИ в коде выше)
Список здесь https://tomcat.apache.org/tomcat-5.5-doc/servletapi/javax/servlet/http/HttpServletResponse.html

Или вообще это всё дичь, мрак и прошлый век и так больше не делают и всё нафиг переписать? ))))
Сам предполагаю, что ближе всего SC_NOT_ACCEPTABLE (406), но описание у него кажется, что не подходит сюда.
...
Рейтинг: 0 / 0
Какой код ответа вернуть в HttpServletResponse, если действие над объектом запрещено?
    #39772529
Nixic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
упс, я тут что-то в коде намутил))
return new ErrorMessage(e.getMessage());
когда e не определена, писал прямо тут в поле сообщения.
Но это не сильно важно, простите)
...
Рейтинг: 0 / 0
Какой код ответа вернуть в HttpServletResponse, если действие над объектом запрещено?
    #39772536
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nixic, верните ResponseEntity с кодом 451, допустим, или 423. И вообще, всегда возвращайте ResponseEntity )
...
Рейтинг: 0 / 0
Какой код ответа вернуть в HttpServletResponse, если действие над объектом запрещено?
    #39772581
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nixic,
Если это какой нибудь rest api, то вполне можно отдать json с кодом 200 и уже в json есть стандарт описания ошибки. Кратко и длинно.
Это если запрет входит в бизнес логику работы клиента. Т.е. обычное дело.
Иначе по безопасности можно вернуть код ошибки не из HTTP.Error для исключения взлома и подбора, брутфорса.
Ну и http.error тоже можно.
...
Можно ведь сказать что запрет ни при чем и это вовсе не запрет а статус Занято))
...
Рейтинг: 0 / 0
Какой код ответа вернуть в HttpServletResponse, если действие над объектом запрещено?
    #39772617
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Nixic,
Если это какой нибудь rest api, то вполне можно отдать json с кодом 200 и уже в json есть стандарт описания ошибки. Кратко и длинно.
Это если запрет входит в бизнес логику работы клиента. Т.е. обычное дело.
Иначе по безопасности можно вернуть код ошибки не из HTTP.Error для исключения взлома и подбора, брутфорса.
Ну и http.error тоже можно.
...
Можно ведь сказать что запрет ни при чем и это вовсе не запрет а статус Занято))

по-моему, я впервые понял Петро и да, лучше ограничить кол-во HttpStatus`ов, которые может вернуть сервис и не использовать экстравагантные. Самое простое, изучить чей нибудь публичный api. Для примера, можно взять api github`а.
...
Рейтинг: 0 / 0
Какой код ответа вернуть в HttpServletResponse, если действие над объектом запрещено?
    #39772639
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Озверинпо-моему, я впервые понял)))
Прогресс у кого, у тебя или у меня?)))))
Наверно у IT индустрии)
...
Рейтинг: 0 / 0
Какой код ответа вернуть в HttpServletResponse, если действие над объектом запрещено?
    #39773077
maxkar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NixicСам предполагаю, что ближе всего SC_NOT_ACCEPTABLE (406), но описание у него кажется, что не подходит сюда.
Нет, 406 явно неприемлемо для данного случая, оно строго про заголовки запроса (и вообще в основном только про Accept). Ваш случай скорее 409 Conflict. У вас действие "запрещено в данном состоянии объекта". Может быть еще 423/424, но я бы сам взял 409. Ну и объект с описанием/статусом/чем угодно в ответе тоже будет полезно вернуть.
...
Рейтинг: 0 / 0
Какой код ответа вернуть в HttpServletResponse, если действие над объектом запрещено?
    #39773556
Nixic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо всем, было интересно почитать варианты и мнения :)
В итоге, не поленился и переписал контроллеры(хорошо, что их там не много) и сделал возврат объекта со статусом 200 и полем success = false.
Обработал на клиенте, кинул в интерфейс соответствующее сообщение из этого же объекта в респонсе :)
...
Рейтинг: 0 / 0
Какой код ответа вернуть в HttpServletResponse, если действие над объектом запрещено?
    #39773619
cossack5
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NixicСпасибо всем, было интересно почитать варианты и мнения :)
В итоге, не поленился и переписал контроллеры(хорошо, что их там не много) и сделал возврат объекта со статусом 200 и полем success = false.
Обработал на клиенте, кинул в интерфейс соответствующее сообщение из этого же объекта в респонсе :)
Уж не знаю, хорошо ли, т.к. возврат http 200 при ошибке - довольно холиварная тема см. ответ на so .
...
Рейтинг: 0 / 0
Какой код ответа вернуть в HttpServletResponse, если действие над объектом запрещено?
    #39773623
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cossack5http 200 при ошибкестакан полуналитый или полупустой? Можно спорить вечно.
...
Рейтинг: 0 / 0
Какой код ответа вернуть в HttpServletResponse, если действие над объектом запрещено?
    #39773687
Фотография SQL2008
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nixic возврат объекта со статусом 200 и полем success = false.
Звучит как "Я жив, но умер."
...
Рейтинг: 0 / 0
Какой код ответа вернуть в HttpServletResponse, если действие над объектом запрещено?
    #39773696
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL2008Nixic возврат объекта со статусом 200 и полем success = false.
Звучит как "Я жив, но умер."))).
Не. Оптимистично: "я сходил в магазин. Хлеба нету"))))
...
Рейтинг: 0 / 0
Какой код ответа вернуть в HttpServletResponse, если действие над объектом запрещено?
    #39773750
Nixic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL2008Nixic возврат объекта со статусом 200 и полем success = false.
Звучит как "Я жив, но умер."
Я жив, но умер. И вот на всякий случай мои данные:
Код: javascript
1.
2.
3.
4.
{"success":"false",
"value":{"name": "Nixic", "age": "12", "weigth": "125"},
"message": "Не возможно удалить"
...}


На самом деле, если писать правильно, то надо было сразу на клиенте писать что-то, что обрабатывало бы ошибки, но так как здесь хрен пойми что и как, то хотя бы так, уже лучше чем было)
...
Рейтинг: 0 / 0
Какой код ответа вернуть в HttpServletResponse, если действие над объектом запрещено?
    #39773772
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nixic
Код: javascript
1.
"value":{"name": "Nixic", "age": "12", "weigth": "125"},

почему не:
ID:134 и всё?
...
Рейтинг: 0 / 0
Какой код ответа вернуть в HttpServletResponse, если действие над объектом запрещено?
    #39773962
Nixic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Nixic
Код: javascript
1.
"value":{"name": "Nixic", "age": "12", "weigth": "125"},

почему не:
ID:134 и всё?
Чтобы потом по ID не отправлять запрос еще раз на сервер если понадобятся данные :)
...
Рейтинг: 0 / 0
Какой код ответа вернуть в HttpServletResponse, если действие над объектом запрещено?
    #39773965
Nixic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
К слову, респонс в value может возвращать значение в json формате сформированного из java объекта любого типа.
SuccessResponseImpl
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
public class SuccessResponseImpl<R> implements SuccessResponse {

	private R value;
	private boolean success;
	private String message;

	public SuccessResponseImpl(R value) {
		this.success = true;
		this.value = value;
	}

	public SuccessResponseImpl(boolean success, String message) {
		this.success = success;
		this.message = message;
	}
...
Getters and Setters
}

...
Рейтинг: 0 / 0
Какой код ответа вернуть в HttpServletResponse, если действие над объектом запрещено?
    #39773994
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Nixic,
Если это какой нибудь rest api, то вполне можно отдать json с кодом 200 и уже в json есть стандарт описания ошибки. Кратко и длинно.
Это если запрет входит в бизнес логику работы клиента. Т.е. обычное дело.
Иначе по безопасности можно вернуть код ошибки не из HTTP.Error для исключения взлома и подбора, брутфорса.
Ну и http.error тоже можно.
...
Можно ведь сказать что запрет ни при чем и это вовсе не запрет а статус Занято))
да отлично ты запросил ентити а тебе прилетает 200 и нот фаунд в бади.
...
Рейтинг: 0 / 0
Какой код ответа вернуть в HttpServletResponse, если действие над объектом запрещено?
    #39774030
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaT,
Ты в моем ответе способен прочитать 4 варианта проектов?
А против того что ты восстал (Одного из 4-х) использует яндекс и гугл api.
...
Рейтинг: 0 / 0
Какой код ответа вернуть в HttpServletResponse, если действие над объектом запрещено?
    #39774075
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Боженька миловал от юза яндекса и гугла. зато наюзался амазона. может у яндекса и гугла пишут профи но амазон пишут проклятые кривые индусы. гугл думаю тоже. яндекс наверное нет. у них такие зарплаты что индусы туда работать не пойдут.

так что так себе пример )

зы. я не восстал но в холиваре на тему 200 саксесс фалс я, пожалуй, займу сторону против хотя браузерщики например, рыдают если им присылаешь 404 и что-то в бади. они говорят что распарсить или обработать "правильно" не могут потому что 404 у них "по особому" обрабатывается.
...
Рейтинг: 0 / 0
Какой код ответа вернуть в HttpServletResponse, если действие над объектом запрещено?
    #39774095
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NixicИли вообще это всё дичь, мрак и прошлый век и так больше не делают и всё нафиг переписать? ))))
Сам предполагаю, что ближе всего SC_NOT_ACCEPTABLE (406), но описание у него кажется, что не подходит сюда.406 - это когда клиент в заголовке Accept что-то написал, а сервер ему так ответить не может, больше 409 подходит, однако как выше написали лучше 200 с правильным пейлоадом: коды ошибок в HTTP - это прошлый век и они реально никакие кейсы не покрывают
...
Рейтинг: 0 / 0
Какой код ответа вернуть в HttpServletResponse, если действие над объектом запрещено?
    #39774190
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
... но статусные коды HTTP-протокола позволяют работать (произвольному) балансировщику нагрузки, а выпендрёж с "ошибка в теле успешного отклика" - нет.
...
Рейтинг: 0 / 0
Какой код ответа вернуть в HttpServletResponse, если действие над объектом запрещено?
    #39774197
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov,

а по каким статусам балансировщик что-то балансировать собирается? Я здесь сходу могу назвать разве что 503, толку от которого не особо-то и много: чтобы взять и перебросить клиента с одной ноды на другую, он либо stateless должен быть, либо состояние между нодами должно синхронизироваться, а больше никаких полезных кодов нет (ну разве что 404 может означать что ничего не задеплоено и нужно валить отсюда, а значит в приложении 404 уже нельзя использовать).

С другой стороны, если думать о том, что если сервер сервер что-то не смог обработать, то нужно возвращать 4xx, то возникают некие проблемы с определением того, какой именно статус нужно возвратить, ну вот примеры:
- клиент прислал невалидные данные (условно не соответствуют схеме) - это какой код?
- мы запрос можем обработать, но от клиента требуется подтверждение (заголовок или еще что) - а это какой код?

Заход с другой стороны: мы делаем нагрузочное тестирование и все наши "выдуманные" 4xx в отчетах будут фигурировать как ошибки, тоже так себе тема.
...
Рейтинг: 0 / 0
Какой код ответа вернуть в HttpServletResponse, если действие над объектом запрещено?
    #39774217
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей ПанфиловBasil A. Sidorov,


С другой стороны, если думать о том, что если сервер сервер что-то не смог обработать, то нужно возвращать 4xx, то возникают некие проблемы с определением того, какой именно статус нужно возвратить, ну вот примеры:
- клиент прислал невалидные данные (условно не соответствуют схеме) - это какой код?

.

сто раз обсуждали и еще 1 раз обсудить или вы в самом деле не знаете, что принято возвращать? (на всякий пожарный, поясню, надо возвращать то, что у вас описано в api). Если же брать общую практику, то :
- валидный json, но что-то не так со схемой - 422 анпроцессибл энтити
- просто ожидаем json, а пришел какой-то xml - 400 бэд реквест
- дальше уже вариации на тему


Андрей Панфилов- мы запрос можем обработать, но от клиента требуется подтверждение (заголовок или еще что) - а это какой код?

- 403 как бе для таких случаев
...
Рейтинг: 0 / 0
Какой код ответа вернуть в HttpServletResponse, если действие над объектом запрещено?
    #39774219
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей ПанфиловЗаход с другой стороны: мы делаем нагрузочное тестирование и все наши "выдуманные" 4xx в отчетах будут фигурировать как ошибки, тоже так себе тема.


Это какой-то надуманный кейс - если у вас проходит нагрузачное тестирование то и логи у вас не продакшн будут. Или в чем проблема?
...
Рейтинг: 0 / 0
Какой код ответа вернуть в HttpServletResponse, если действие над объектом запрещено?
    #39774242
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей ПанфиловNixicИли вообще это всё дичь, мрак и прошлый век и так больше не делают и всё нафиг переписать? ))))
Сам предполагаю, что ближе всего SC_NOT_ACCEPTABLE (406), но описание у него кажется, что не подходит сюда.406 - это когда клиент в заголовке Accept что-то написал, а сервер ему так ответить не может, больше 409 подходит, однако как выше написали лучше 200 с правильным пейлоадом: коды ошибок в HTTP - это прошлый век и они реально никакие кейсы не покрывают

если отказываться от "одного" рест подхода, то и методы типа post, put, delete - тоже нет смысла использовать. Переходите на json rpc - не парьтесь: все запросы post с нагрузкой.
...
Рейтинг: 0 / 0
25 сообщений из 58, страница 1 из 3
Форумы / Java [игнор отключен] [закрыт для гостей] / Какой код ответа вернуть в HttpServletResponse, если действие над объектом запрещено?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]