Java 将ServletResponse头传递到ResponseEntity
Spring MVC控制器需要有条件地: 1.)将用户转发到完全不同的URI,或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(
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);
}
}