-
Notifications
You must be signed in to change notification settings - Fork 371
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
JsonView和统一封装返回结果的问题 #53
Comments
亲,你的邮件我已经收到,谢谢
|
@yangwenliang123 这个是 chatgpt 的回答,你试试,可以微调,做的更加完美: 当响应统一包装为 为了使 使用ResponseBodyAdvice:实现 @ControllerAdvice
public class JsonViewResponseBodyAdvice implements ResponseBodyAdvice<Object> {
@Override
public boolean supports(MethodParameter returnType, Class<? extends HttpMessageConverter<?>> converterType) {
return true;
}
@Override
public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType,
Class<? extends HttpMessageConverter<?>> selectedConverterType, ServerHttpRequest request,
ServerHttpResponse response) {
if (body instanceof Result<?>) {
R<?> result = (Result<?>) body;
if (result.getData() != null && result.getData() instanceof User) {
User user = (User) result.getData();
MappingJacksonValue wrapper = new MappingJacksonValue(user);
wrapper.setSerializationView(UserViews.Full.class);
return new Result<>(result.getCode(), result.getMessage(), wrapper);
}
}
return body;
}
} 上面的代码中, |
我采用了自定义序列化器解决 /**
|
项目里很多时候使用统一封装返回结果,例如net.dreamlu.mica.core.result.R类。
public class User {
public interface UserInfo{};
public interface UserDetail extends UserInfo{};
private String username;
private String password;
@JSONVIEW(UserInfo.class)
public String getUsername() {
return username;
}
@JSONVIEW(UserDetail.class)
public String getPassword() {
return password;
}
}
@RequestMapping("/user")
@JSONVIEW(User.UserInfo.class)
public User getUser(@RequestParam String username){
User user = new User();
user.setUsername("123");
user.setPassword("123");
return user;
}
@RequestMapping("/user")
@JSONVIEW(User.UserInfo.class)
public R getUser(@RequestParam String username){
User user = new User();
user.setUsername("123");
user.setPassword("123");
return R.success(user);
}
在第一个返回中 可以只给前端展示username属性
但是在第二个返回中 用R包装了User对象后,JsonView就失效了,在前端无法获取到User对象的数据。
The text was updated successfully, but these errors were encountered: