spring boot jsonp服务端怎么写
1个回答
2017-06-30
展开全部
5、 Jackson @JsonView支持
可以使用@JsonView来分组渲染JSON数据,按需展示JSON数据。
5.1、模型
Java代码 收藏代码
public class User implements Serializable {
public static interface OnlyIdView {}
public static interface OnlyNameView {}
public static interface AllView extends OnlyIdView, OnlyNameView {}
@JsonView(OnlyIdView.class)
private Long id;
@JsonView(OnlyNameView.class)
private String name;
……
}
定义了三个视图:OnlyIdView、OnlyNameView和AllView。
5.2、控制器
Java代码 收藏代码
@RestController
public class JacksonJsonViewController {
@RequestMapping("/jackson1")
@JsonView(User.OnlyIdView.class)
public User test1() {
return new User(1L, "zhangsan");
}
@RequestMapping("/jackson2")
@JsonView(User.OnlyNameView.class)
public User test2() {
return new User(1L, "zhangsan");
}
@RequestMapping("/jackson3")
@JsonView(User.AllView.class) //可以省略
public User test3() {
return new User(1L, "zhangsan");
}
}
使用@JsonView控制渲染哪些数据。
6、Jsonp支持
6.1、MappingJackson2JsonView提供的支持
Java代码 收藏代码
<bean class="org.springframework.web.servlet.view.json.MappingJackson2JsonView">
<property name="jsonpParameterNames">
<set>
<value>jsonp</value>
<value>callback</value>
</set>
</property>
</bean>
然后访问如http://localhost:8080/json?callback=callback即可得到JSONP响应:callback({"user":{"id":1,"name":"zhangsan"}});。
6.2、对使用HttpMessageConverter的@ResponseBody的支持
Java代码 收藏代码
@Order(2)
@ControllerAdvice(basePackages = "com.github")
public class JsonpAdvice extends AbstractJsonpResponseBodyAdvice {
public JsonpAdvice() {
super("callback", "jsonp"); //指定jsonpParameterNames
}
}
访问http://localhost:8080/jackson1?callback=callback即可看到JSONP响应。
@ContollerAdvice的作用请参考《Spring3.2新注解@ControllerAdvice》,basePackages用于指定对哪些包里的Controller起作用。
6.3、ResponseBodyAdvice
我们之前实现的JsonpAdvice其继承自AbstractJsonpResponseBodyAdvice,而AbstractJsonpResponseBodyAdvice继承自ResponseBodyAdvice,其作用是在响应体写出之前做一些处理:
Java代码 收藏代码
@Order(1)
@ControllerAdvice(basePackages = "com.github")
public class MyResponseBodyAdvice implements ResponseBodyAdvice<Object> {
@Override
public boolean supports(MethodParameter methodParameter, Class<? extends HttpMessageConverter<?>> converterType) {
return methodParameter.getMethod().getReturnType().isAssignableFrom(User.class);
}
@Override
public Object beforeBodyWrite(
Object obj, MethodParameter methodParameter, MediaType mediaType,
Class<? extends HttpMessageConverter<?>> converterType,
ServerHttpRequest serverHttpRequest, ServerHttpResponse serverHttpResponse) {
User user = ((User)obj);
user.setName("---" + user.getName() + "---");
return user;
}
}
1、supports指定支持哪些类型的方法进行处理,此处是返回值为User的;2、我们得到User对象然后在名字前后拼上”---“ ;3、可以指定多个ResponseBodyAdvice,使用@Order指定顺序。访问http://localhost:8080/jackson2?callback=callback可以看到效果。
7、Gson HttpMessageConverter
7.1、spring配置
Java代码 收藏代码
<mvc:annotation-driven>
<mvc:message-converters>
<bean class="org.springframework.http.converter.json.GsonHttpMessageConverter"/>
</mvc:message-converters>
</mvc:annotation-driven>
使用方式和Jackson Json类似。本文使用的是<gson.version>2.2.4</gson.version>版本。
可以使用@JsonView来分组渲染JSON数据,按需展示JSON数据。
5.1、模型
Java代码 收藏代码
public class User implements Serializable {
public static interface OnlyIdView {}
public static interface OnlyNameView {}
public static interface AllView extends OnlyIdView, OnlyNameView {}
@JsonView(OnlyIdView.class)
private Long id;
@JsonView(OnlyNameView.class)
private String name;
……
}
定义了三个视图:OnlyIdView、OnlyNameView和AllView。
5.2、控制器
Java代码 收藏代码
@RestController
public class JacksonJsonViewController {
@RequestMapping("/jackson1")
@JsonView(User.OnlyIdView.class)
public User test1() {
return new User(1L, "zhangsan");
}
@RequestMapping("/jackson2")
@JsonView(User.OnlyNameView.class)
public User test2() {
return new User(1L, "zhangsan");
}
@RequestMapping("/jackson3")
@JsonView(User.AllView.class) //可以省略
public User test3() {
return new User(1L, "zhangsan");
}
}
使用@JsonView控制渲染哪些数据。
6、Jsonp支持
6.1、MappingJackson2JsonView提供的支持
Java代码 收藏代码
<bean class="org.springframework.web.servlet.view.json.MappingJackson2JsonView">
<property name="jsonpParameterNames">
<set>
<value>jsonp</value>
<value>callback</value>
</set>
</property>
</bean>
然后访问如http://localhost:8080/json?callback=callback即可得到JSONP响应:callback({"user":{"id":1,"name":"zhangsan"}});。
6.2、对使用HttpMessageConverter的@ResponseBody的支持
Java代码 收藏代码
@Order(2)
@ControllerAdvice(basePackages = "com.github")
public class JsonpAdvice extends AbstractJsonpResponseBodyAdvice {
public JsonpAdvice() {
super("callback", "jsonp"); //指定jsonpParameterNames
}
}
访问http://localhost:8080/jackson1?callback=callback即可看到JSONP响应。
@ContollerAdvice的作用请参考《Spring3.2新注解@ControllerAdvice》,basePackages用于指定对哪些包里的Controller起作用。
6.3、ResponseBodyAdvice
我们之前实现的JsonpAdvice其继承自AbstractJsonpResponseBodyAdvice,而AbstractJsonpResponseBodyAdvice继承自ResponseBodyAdvice,其作用是在响应体写出之前做一些处理:
Java代码 收藏代码
@Order(1)
@ControllerAdvice(basePackages = "com.github")
public class MyResponseBodyAdvice implements ResponseBodyAdvice<Object> {
@Override
public boolean supports(MethodParameter methodParameter, Class<? extends HttpMessageConverter<?>> converterType) {
return methodParameter.getMethod().getReturnType().isAssignableFrom(User.class);
}
@Override
public Object beforeBodyWrite(
Object obj, MethodParameter methodParameter, MediaType mediaType,
Class<? extends HttpMessageConverter<?>> converterType,
ServerHttpRequest serverHttpRequest, ServerHttpResponse serverHttpResponse) {
User user = ((User)obj);
user.setName("---" + user.getName() + "---");
return user;
}
}
1、supports指定支持哪些类型的方法进行处理,此处是返回值为User的;2、我们得到User对象然后在名字前后拼上”---“ ;3、可以指定多个ResponseBodyAdvice,使用@Order指定顺序。访问http://localhost:8080/jackson2?callback=callback可以看到效果。
7、Gson HttpMessageConverter
7.1、spring配置
Java代码 收藏代码
<mvc:annotation-driven>
<mvc:message-converters>
<bean class="org.springframework.http.converter.json.GsonHttpMessageConverter"/>
</mvc:message-converters>
</mvc:annotation-driven>
使用方式和Jackson Json类似。本文使用的是<gson.version>2.2.4</gson.version>版本。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询