Разрешают ли стандарты микросервисной архитектуры/остального API разные структуры для разных кодов ответа, например, для 200 и 207?
Если да, то как я могу реализовать то же самое в моем приложении для весенней загрузки?
Ответ - да, например, подумайте о коде ответа 200 и коде ответа 404: с первым будет возвращен действительный объект, а для второго - должен быть возвращен какой-либо объект ошибки. Совершенно разные структуры. Насчет реализации, конечно есть много способов, рекомендую посмотреть на ResponseEntity.
Мой вопрос касается сравнения между 200 и 207. Я знаю об обработке исключений.
@user1354825 user1354825 ответ idanz - это все, что вам нужно, это зависит от вашей реализации, чтобы решить, когда отправлять 200, 204, 207. если вы ищете прозрачный способ заставить Springboot сделать это за вас, то его нет.
@Sombriks, поэтому вы рекомендуете использовать универсальный тип или тип суперкласса или, скажем, строку / объект в качестве возвращаемого типа?
@ user1354825 Я бы рекомендовал использовать класс ResponseEntity, как описано в ответе. Обратите внимание, что он является общим, поэтому вы можете вернуть его с разными типами (T) для разных кодов ответа.
@idanz Хороший вопрос, и я бы даже сказал, что для одного кода ответа 200 OK я ожидаю, что большинство конечных точек в полезном приложении будут возвращать разные структуры.
Я предполагаю, что указание правильного кода ошибки (200/207 и т. д.) будет находиться в компетенции бизнес-логики. Вы можете сделать следующее:
ResponseEntity<Object> должен быть типом возвращаемого значения вашего метода контроллера.
Верните Spring ResponseEntity после манипуляций, как показано в примере. Для более распространенных у Spring есть встроенные методы (показаны для 200 и 204). Для пользовательских кодов ошибок Spring позволяет вручную создать объект с необходимыми параметрами.
@GetMapping(path = "/demo/example")
public ResponseEntity<Object> getData (
@RequestParam(name = "auth_id") String authId
) {
//Logic
//200
//return ResponseEntity.ok().body(objFor200Response);
//204
//return ResponseEntity.accepted().body(objFor204Response);
//207
//return new ResponseEntity<>(objFor207Response,HttpStatus.MULTI_STATUS);
}
Надеюсь, это ответит на ваш вопрос, удачного кодирования :)
Вы имеете в виду, что одна и та же конечная точка может возвращать разные коды ответа 2xx или что у вас есть разные конечные точки, которые возвращают разные коды 2xx? Большая разница