2015-08-11 2 views
1

В настоящее время в разработке есть приложение java spring. Он использует ui вместе с restful apis, которые отправляют/получают json через почтовые запросы.Java Spring rest return unauthorized json

Каждый запрос api должен быть подтвержден с помощью токена, который будет отправлен с запросом. Это действие завершено и возвращается логическое значение. Теперь проблема в том, когда логическое значение false (токен недействителен) Мне нужно вернуть ошибку 401 конечному пользователю. В настоящее время я возвращаю List, который преобразуется в json. Как я могу вернуть некоторую ошибку 401 конечному пользователю.

Пример

//done 
    @RequestMapping(value = "/getSomething" 
      , method = RequestMethod.POST 
      , consumes = "application/json" 
      , produces = "application/json") 
    @ResponseBody 
    public List<Obj> getSomething(@RequestBody Input f) { 

     DAOImpl dAOImpl = (MapDAOImpl) appContext.getBean("DAOImpl"); 

     Boolean res = dAOImpl.validateToken(f.session); 
     if(res) { 
      List<Obj> response = dAOImpl.getSomething(f.ID); 
      return response; 
     } else { 

      return new ResponseEntity<String>("test", HttpStatus.UNAUTHORIZED); 
     } 

    } 
+1

Как правило, я просто выдавал исключение, аннотированное с помощью '@ ResponseStatus'. – chrylis

+0

Вы всегда должны возвращать «ResponseEntity» - в первом случае вернуть ResponseEntity с телом - List и статус 200; во втором случае: либо вернуть ResponseEntity с пустым списком тела и статусом 401, либо исключить исключение, как предложено в предыдущем комментарии. – hovanessyan

ответ

6

Вам просто нужно изменить тип возврата к ResponseEntity.

@RequestMapping(value = "/getSomething" 
     , method = RequestMethod.POST 
     , consumes = "application/json" 
     , produces = "application/json") 
@ResponseBody 
public ResponseEntity<?> getSomething(@RequestBody Input f) { 

    DAOImpl dAOImpl = (MapDAOImpl) appContext.getBean("DAOImpl"); 

    Boolean res = dAOImpl.validateToken(f.session); 
    if(res) { 
     List<Obj> response = dAOImpl.getSomething(f.ID); 
     return new ResponseEntity<>(response, HttpStatus.OK); 
    } 
    return new ResponseEntity<String>("Unauthorized", HttpStatus.UNAUTHORIZED); 
} 

Примечание: Я бы рекомендовал передать надлежащий JSON в ответ на ошибку, чтобы клиент мог анализировать и использовать, если требуется.

+0

Это похоже на работу. Я ценю рекомендацию по использованию Responseentity – user2524908

Смежные вопросы