Java Spring rest返回未经授权的json

Java Spring rest返回未经授权的json,java,json,spring,rest,spring-mvc,Java,Json,Spring,Rest,Spring Mvc,目前正在开发一个JavaSpring应用程序。它利用一个ui和restful API,通过post请求发送/接收json 每个api请求都需要使用令牌进行验证,令牌将随请求一起发送。此操作完成并返回布尔值。现在的问题是,当布尔值为false(令牌无效)时,我需要向最终用户返回401错误。目前我返回的列表正在转换为json。如何向最终用户返回一些401错误 范例 //done @RequestMapping(value = "/getSomething" ,

目前正在开发一个JavaSpring应用程序。它利用一个ui和restful API,通过post请求发送/接收json

每个api请求都需要使用令牌进行验证,令牌将随请求一起发送。此操作完成并返回布尔值。现在的问题是,当布尔值为false(令牌无效)时,我需要向最终用户返回401错误。目前我返回的列表正在转换为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);
        }

    } 
//完成
@请求映射(value=“/getSomething”
,method=RequestMethod.POST
,consumes=“application/json”
,products=“application/json”)
@应答器
公共列表getSomething(@RequestBody Input f){
DAOImpl DAOImpl=(MapDAOImpl)appContext.getBean(“DAOImpl”);
布尔res=dAOImpl.validateToken(f.session);
如果(res){
列表响应=dAOImpl.getSomething(f.ID);
返回响应;
}否则{
返回新的响应属性(“测试”,HttpStatus.UNAUTHORIZED);
}
} 

您只需将返回类型更改为
响应属性

@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);
} 
@RequestMapping(value=“/getSomething”
,method=RequestMethod.POST
,consumes=“application/json”
,products=“application/json”)
@应答器
公共响应属性getSomething(@RequestBody Input f){
DAOImpl DAOImpl=(MapDAOImpl)appContext.getBean(“DAOImpl”);
布尔res=dAOImpl.validateToken(f.session);
如果(res){
列表响应=dAOImpl.getSomething(f.ID);
返回新的ResponseEntity(response,HttpStatus.OK);
} 
返回新的响应状态(“未授权”,HttpStatus.Unauthorized);
} 

注意:我建议在错误响应中传递正确的JSON,以便客户端可以在需要时解析和使用。

通常,我只会抛出一个带有
@ResponseStatus
注释的异常。您应该始终返回“ResponseEntity”-在第一种情况下,返回带有body-List和status 200的ResponseEntity;在第二种情况下:返回ResponseEntity,返回body空列表和状态401,或者按照前面的注释中的建议抛出异常。这似乎有效。我很欣赏关于始终使用Responseentity的建议