java - 如何处理响应代码?

标签 java spring spring-mvc

我需要发送取决于响应代码的不同 json。

 @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”
    }

如何使用 ResponseBodyAdvice 做到这一点?

@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;
        }
    }
}

最佳答案

我是这样做的:

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);

}

关于java - 如何处理响应代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51540066/

相关文章:

java - Spring/Grails - 使用新属性重新加载 bean

java - Crudrepository - 没有找到依赖项类型的合格 bean : expected at least 1 bean which qualifies as autowire candidate for this dependency

java - Spring 配置 : 2 beans with same class reference

java - 如何将@requestBody 映射到特定的initBinder 方法?

java - 使用数组或列表在 JSP 中自动完成文本框

java - 无法调用DAO类的方法-非静态方法插入不能从静态上下文中引用

java - 如何映射来自同一源类的扩展 DTO

java - 如何修复更改类似数组列表值的 android Setters?

Java-Shiro-ehcache配置

java - 如何在单独的文件中组织我的处理代码?