Java 将ServletResponse头传递到ResponseEntity

Java 将ServletResponse头传递到ResponseEntity,java,spring,spring-mvc,Java,Spring,Spring Mvc,Spring MVC控制器需要有条件地: 1.)将用户转发到完全不同的URI,或 2.)返回前面的视图,以便用户可以以相同的形式重新输入数据 我的研究表明,重定向应该通过给控制器方法一个返回类型ResponseEntity来完成如何将传递到控制器方法的HttpServletResponse中的HttpHeaders转换为在控制器中创建的新ResponseEntity @RequestMapping("/handle") public ResponseEntity<?> handle(

Spring MVC控制器需要有条件地:

1.)将用户转发到完全不同的URI,或
2.)返回前面的视图,以便用户可以以相同的形式重新输入数据

我的研究表明,重定向应该通过给控制器方法一个返回类型
ResponseEntity
来完成如何将传递到控制器方法的
HttpServletResponse
中的
HttpHeaders
转换为在控制器中创建的新
ResponseEntity

@RequestMapping("/handle")
public ResponseEntity<?> handle( HttpServletRequest req, HttpServletResponse resp) {
    HttpHeaders responseHeaders = resp.getHeaders();//THIS IS NOT IN THE API
    responseHeaders.set("MyResponseHeader", "MyValue");
    boolean locationRedirect = true;
    // Add some logic to determine whether to 1.) forward the user or 2.) return the previous view so they can re-enter information
    if(locationRedirect){
        try {
            URI location = new URI("some_uri_to_send_user_to_if_they_entered_correct_value_in_form");
            responseHeaders.setLocation(location);
        } catch (URISyntaxException e) {e.printStackTrace();}
        return new ResponseEntity<Void>(responseHeaders, HttpStatus.CREATED);
    } else{// send the user back to the freeMarker view that would otherwise be at 'return "viewName";'
        return new ResponseEntity<String>("viewName", responseHeaders, HttpStatus.CREATED);
    }
}
没有
HttpServletResponse.getHeaders()
方法,必须有比(伪代码中)更优雅的方法:

如果用户没有以前面的FreeMarker视图的形式提供正确的信息,那么控制器也应该能够返回用户调用控制器的前一个FreeMarker视图,这一额外要求有点混淆了这一点

以下是我迄今为止所做的代码。需要对其进行哪些具体更改?

@RequestMapping("/handle")
public ResponseEntity<?> handle( HttpServletRequest req, HttpServletResponse resp) {
    HttpHeaders responseHeaders = resp.getHeaders();//THIS IS NOT IN THE API
    responseHeaders.set("MyResponseHeader", "MyValue");
    boolean locationRedirect = true;
    // Add some logic to determine whether to 1.) forward the user or 2.) return the previous view so they can re-enter information
    if(locationRedirect){
        try {
            URI location = new URI("some_uri_to_send_user_to_if_they_entered_correct_value_in_form");
            responseHeaders.setLocation(location);
        } catch (URISyntaxException e) {e.printStackTrace();}
        return new ResponseEntity<Void>(responseHeaders, HttpStatus.CREATED);
    } else{// send the user back to the freeMarker view that would otherwise be at 'return "viewName";'
        return new ResponseEntity<String>("viewName", responseHeaders, HttpStatus.CREATED);
    }
}
@RequestMapping(“/handle”)
公共响应句柄(HttpServletRequest-req、HttpServletResponse-resp){
HttpHeaders responseHeaders=resp.getHeaders();//这不在API中
responseHeaders.set(“MyResponseHeader”、“MyValue”);
布尔locationRedirect=true;
//添加一些逻辑以确定是1.)转发用户还是2.)返回上一个视图,以便他们可以重新输入信息
如果(位置重定向){
试一试{
URI location=新URI(“如果某些用户在表单中输入了正确的值,则发送给用户”);
负责人。设置位置(位置);
}catch(URISyntaxException e){e.printStackTrace();}
返回新的ResponseEntity(responseHeaders,HttpStatus.CREATED);
}else{//将用户发送回freeMarker视图,否则该视图将位于“return”viewName
返回新的ResponseEntity(“viewName”,responseHeaders,HttpStatus.CREATED);
}
}