我有一个类似于以下内容的网络服务:
@RequestMapping(value = "/getMovies", method = RequestMethod.POST, produces = "application/json")
public @ResponseBody ResponseVO getMoviesList(@RequestBody RequestVO vo) { .... }
RequestVO
类是:
public class RequestVO {
private String[] genreList;
public void updateRequest() {
if (genreList != null) {
// remove the duplicates from the list
// or something else
}
}
public String[] getGenreList() {
return genreList;
}
public void setGenreList(String[] genreList) {
this.genreList = genreList;
}
}
现在我希望在将请求json处理为updateRequest
之后自动调用方法RequestVO
。我目前想到的一件事是@PostConstruct
,但在这种情况下似乎毫无用处。
我的问题是Spring
提供任何此类注释或机制吗?或者@PostConstruct
可以解决这个问题吗?
注意:我不需要解决方法,因为我有很多。所以请不要发布它们。以上代码仅仅是样本(请忽略小错误)。
答案 0 :(得分:0)
要考虑几个方面:
在将RequestVO实例传递给RequestVO.updateRequest()
之前,您想要实现的是getReportData()
,是不是?如果是这样,你能详细说明,为什么不能在getReportData()的开头调用这个方法?
如果您想要实现这种功能,尽管它是否合理,请尝试:
getReportData()
之前调用并调用updateRequest()
使用@JsonFactory
(假设您使用Jackson将JSON映射到Java对象),例如:
public class RequestVO {
private String[] genreList;
public void updateRequest() {
if (genreList != null) {
...
}
}
public String[] getGenreList() {
return genreList;
}
public void setGenreList(String[] genreList) {
this.genreList = genreList;
}
@JsonFactory
public static RequestVO createExample(@JsonProperty("genreList") final String[] genreList) {
RequestVO request = new RequestVO(genreList);
request.updateRequest();
return request;
}
}
答案 1 :(得分:0)
正如您所说,@PostConstruct
仅在 bean 创建后调用,在此处没有用。但是在另一个方法结束后,你有2种简单的方法来调用方法。
explicit:将真正的方法包装在另一个方法中,并在那里进行所有预处理或后处理
@RequestMapping(value = "/getMovies", method = RequestMethod.POST, produces = "application/json")
public @ResponseBody ResponseVO getMoviesList(@RequestBody RequestVO vo) {
// pre_processing
ResponseVO resul = doGetMoviesList(vo);
// post_processing
return resul;
}
public ResponseVO doGetMoviesList(RequestVO vo) { ... }
编写起来很简单,即使不是非常很好。