我读过以下问题:
https://stackoverflow.com/a/25609465/2674303
我有spring-mvc应用程序。如果我使用@ResponseBody
注释注释控制器方法并在方法内返回对象,则服务器将json提供给客户端。我有杰克逊在课堂上。
在提到的例子中写了以下代码
ObjectMapper mapper = new ObjectMapper();
mapper.setFilters(new SimpleFilterProvider().addFilter("filter", new ExcludeIdFilter()));
据我所知,这段代码已经写在春天的内部......
请说明如何注册自定义jackson过滤器?
您可以像这样配置自己的MappingJackson2HttpMessageConverter
实例:
@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {
@Override
public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
ObjectMapper mapper = Jackson2ObjectMapperBuilder().json()
.filters(new SimpleFilterProvider().addFilter("filter", new ExcludeIdFilter()));
MappingJackson2HttpMessageConverter converter =
new MappingJackson2HttpMessageConverter(mapper);
// then replace the default MappingJackson2HttpMessageConverter
// with your custom one in the list of configured converters
}
}
您可以通过在<mvc:message-converters>
中定义映射来处理它下面的示例只使用了StringHttpMessageConverter
,这意味着所有String字段都在您的responseValueObjects转换为json,如果您希望您的对象也转换为jSon,您应该编写自定义消息转换器并将其设置为<mvc:message-converters>
。
为spring-servlet.xml
<!-- Activate to Spring MVC annotion like @RequestMapping or @Controller -->
<mvc:annotation-driven>
<mvc:message-converters>
<bean class="org.springframework.http.converter.StringHttpMessageConverter" />
<bean
class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter" />
</mvc:message-converters>
</mvc:annotation-driven>
假设您查询您的用户,下面是Controller类。
@Controller
@RequestMapping(value = "api/queryUser")
public class ApiQueryUser {
@Autowired
private UserService userService;
@Autowired
private ValidationService validationService;
@RequestMapping(method = RequestMethod.POST)
@ResponseBody
public UserResponseValue queryUser(HttpServletRequest request) {
UserResponseValue userResponseValue = new UserResponseValue();
String userName = request.getParameter("USERNAME");
String password = request.getParameter("PASSWORD");
String email = request.getParameter("EMAIL");
try {
// validationService.validateParamaterNotNull(userName, password);
BR_User user = userService.queryUser(userName, password, email);
userResponseValue.setUserName(user.getUserName());
userResponseValue.setEmail(user.getEmail());
userResponseValue.setRole(user.getRole());
userResponseValue.setResponseCode("100");
userResponseValue.setResponseMessage("User exist");
} catch (ValidationException e) {
userResponseValue.setResponseCode("99");
userResponseValue.setErrorCode(e.getErrorCode().name());
} catch (ApiException e) {
userResponseValue.setResponseCode("98");
userResponseValue.setErrorCode(e.getErrorCode().name());
} catch (Exception e) {
userResponseValue.setResponseCode("96");
userResponseValue.setErrorCode(ErrorCode.ERR20000.name());
}
return userResponseValue;
}
}
最后回复Value对象,注意所有字段都是qazxsw poi
String
并确保在你的public class UserResponseValue{
private String userName;
private String role;
private String email;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getRole() {
return role;
}
public void setRole(String role) {
this.role = role;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
添加杰克逊依赖
pom.xml
这是我项目的实例。我正在使用Spring 4。
我找到了临时的解决方案:
<!-- To use responseBody as a default JSON messageConverter -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.5.1</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.5.1</version>
</dependency>
欢迎任何其他建议