Spring- @ ControllerAdvice使用

时间:2016-01-07 06:32:30

标签: spring spring-mvc

我要求上传图片。这涉及到两件事: 1.将图像压入图像服务器 2.将图像数据保存到DB

此图像推送逻辑很常见,并且在所有控制器中都有引用。我只想在拦截器中维护这个图像推送逻辑,或者用@ControllerAdvice维护一个单独的控制器。

在委托给相关控制器之前请求处理用@ControllerAdvice类注释的推送逻辑,然后将结果数据传递给相关控制器。

任何帮助都可以在此得到赞赏。

2 个答案:

答案 0 :(得分:0)

拦截器就是你要找的......

看看这个例子:

@Configuration
@EnableWebMvc
@ComponentScan(basePackages="myapp.server.controller") 
public class AppConfig extends WebMvcConfigurerAdapter {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new ImageUploadInterceptor());
    }
}

现在我们定义拦截器:

@Component
public class ImageUploadInterceptor extends HandlerInterceptorAdapter {
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

        //Upload image here

        return true;
    }
}

这是否满足您的需求?

答案 1 :(得分:0)

现在我的代码如下所示

@Controller
public class StoreController{

@Autowired services..

@RequestMapping("/store/image")

public ModelAndView saveStoreImage(@ModelAttribute("imageUpload") final ImageUpload,BindingResult){

//现在首先将推送图像推送到内容服务器 使用ProcessBuilder..it调用.sh文件将返回状态码0(0表示成功上传到静态图像服务器的图像)

//现在创建真实的Image obj

final Image image = new Image(); // Image is my own domain
image.setEntityId(storeId);
image.setImageUri("/images/testImage.png");
imageService.save(image);

//此图像uri是我们之前推送的名称的图像路径

//现在提供服务将图像保存到DB

}

}

相同的上述代码在所有控制器中重复

@Controller     公共类Couponcontroller {

@Autowired Services....


@ReqMapping("/coupon/image")



  public ModelAndView saveCouponImage((@ModelAttribute("imageUplod") final ImageUpload,BindingResult){


 // same push logic like above executing sh file..is common always
//and then create Image and populate data save into DB

  }
    }

现在我想用@ControllerAdvice维护公共图像上传(推送)逻辑到一个类,并将图像数据传递给相关的控制器。

谢谢, Syamala。