Java 如何处理响应代码?
我需要发送不同的JSON,这取决于响应代码Java 如何处理响应代码?,java,spring,spring-mvc,Java,Spring,Spring Mvc,我需要发送不同的JSON,这取决于响应代码 @ApiOperation(value = "saveObject", nickname = "saveObject", httpMethod = "POST") @ApiResponses(value = { @ApiResponse(code = 200, message = "Success"), @ApiResponse(code = 404, message =
@ApiOperation(value = "saveObject", nickname = "saveObject", httpMethod = "POST")
@ApiResponses(value = {
@ApiResponse(code = 200, message = "Success"),
@ApiResponse(code = 404, message = "Not Found"),
@ApiResponse(code = 500, message = "Failure")})
@PostMapping(value = "/save")
public void saveUser(@RequestBody ObjectView object) {
objectService.saveObject(object);
}
示例:如果代码为200,则应发送
data: {
“result”:”success”
}
如果500
data: {
“error”:”500”
}
如何使用ResponseByAdvice
@RestControllerAdvice
public class ResponseView implements ResponseBodyAdvice<Object> {
@Override
public boolean supports(MethodParameter methodParameter, Class<? extends HttpMessageConverter<?>> aClass) {
return true;
}
@Override
public Object beforeBodyWrite(Object o, MethodParameter methodParameter, MediaType mediaType,
Class<? extends HttpMessageConverter<?>> aClass, ServerHttpRequest serverHttpRequest,
ServerHttpResponse serverHttpResponse) {
return new WrapperObj<Object>(o);
}
@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY)
@JsonSerialize
private class WrapperObj<T> {
private final Object data;
public WrapperObj(Object data) {
this.data = data;
}
}
}
@RestControllerAdvice
公共类ResponseView实现ResponseBodyAdvice{
@凌驾
公共布尔支持(MethodParameter,类>aClass){
返回true;
}
@凌驾
BodyWrite之前的公共对象(对象o、方法参数、方法参数、MediaType、MediaType、,
类>aClass,ServerHttpRequest ServerHttpRequest,
ServerHttpResponse服务器HttpResponse){
返回新的包装器obj(o);
}
@JsonAutoDetect(fieldVisibility=JsonAutoDetect.Visibility.ANY)
@JsonSerialize
私有类包装器OBJ{
私有最终对象数据;
公共包装器OBJ(对象数据){
这个数据=数据;
}
}
}
我是这样做的:
import org.springframework.http.HttpStatus;
public Object beforeBodyWrite(Object o, MethodParameter methodParameter, MediaType mediaType, Class<? extends HttpMessageConverter<?>> aClass, ServerHttpRequest serverHttpRequest, ServerHttpResponse serverHttpResponse) {
HttpServletResponse servletResponse = ((ServletServerHttpResponse) serverHttpResponse).getServletResponse();
if(servletResponse.getStatus() == 200) {
return createYourResponseBodyE_G_200().getBody();
} else if(servletResponse.getStatus() == 500) {
return createYourResponseBodyE_G_500().getBody();
}
public ResponseEntity<Object> createYourResponseBodyE_G_200() {
return new ResponseEntity<Object>( "data: { \"result\":\"success\" }", HttpStatus.OK);
}
public ResponseEntity<Object> createYourResponseBodyE_G_500() {
return new ResponseEntity<Object>( "data: { \"error\":\"500\" }", HttpStatus.INTERNAL_SERVER_ERROR);
}
import org.springframework.http.HttpStatus;
BodyWrite之前的公共对象(对象o、方法参数MethodParameter、MediaType MediaType、类>aClass、ServerHttpRequest ServerHttpRequest、ServerHttpResponse ServerHttpResponse){
HttpServletResponse servletResponse=((ServletServerHttpResponse)serverHttpResponse.getServletResponse();
if(servletResponse.getStatus()==200){
返回createYourResponseBodyE_G_200().getBody();
}else if(servletResponse.getStatus()==500){
返回createYourResponseBodyE_G_500().getBody();
}
公共响应创建您的响应{
返回新的ResponseEntity(“数据:{\“result\”:\“success\”}),HttpStatus.OK);
}
公共响应创建您的响应{
返回新的响应属性(“数据:{\'error\':\'500\'}”,HttpStatus.INTERNAL\u SERVER\u error);
}
@RestControllerAdvice它是有效的注释吗?@SumeshTG:Oh我看到了@exceptionhandlentfoundexception(CustomNotFoundException.class)public ResponseMsg handleNotFoundException(CustomNotFoundException ex){ResponseMsg ResponseMsg=newresponsemsg(ex.getMessage());return ResponseMsg;}
将类似的处理程序方法添加到该控制器中。