使用SpringMvc 开发 RESTful API 用户详情请求、JsonView注解使用(二)

本文介绍如何使用@PathVariable进行URL映射,并通过正则表达式匹配ID。同时,探讨了@JsonView注解的应用场景,展示了如何根据不同视图需求控制JSON输出。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

@PathVariable 映射url片段到java方法的参数
在url声明中使用正则表达式
@JsonView控制json输出内容

1.获取用户详情

测试用例

import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;


@Test
public void whenGetInfoSuccess(){
// url代表资源,方法代表查询做出的操作 状态码获取状态
mockMvc.perform(get("/user/1")
                .contentType(MediaType.APPLICATION_JSON_UTF8))
                .andExpect(status().isOk)
                .andExcept(jsonPath($.username).value("tom"));
}

@Test
public whenGetInfoFalil(){
 mockMvc.perform(get("/user/a"))
             .contentType(MediaType.APPLICATION_JSON_UTF8)
             .andExcept(status().is4xxClientError()); 
}

Controller

    @GetMapping("/{id:\\d+}")
    public User getInfo(@PathVariable(value = "id") String id) {
        User user = new User();
        user.setUsername("tom");
        user.setPassword("123456");
        return user;
    }

2.@JsonView 注解的使用

什么样的场景下适用于JonView注解?
比如下面这两个方法

// 返回一组信息
public List<User> query(){}   
// 返回单个用户的信息
public User getInfo(){}   

在这个用户的对对象里面包含 两个字段 一个是username 一个是password
假设在查询的时候不把用户的密码返回过去,而在返回单个用户信息的时候把密码这个字段返回

JsonView使用步骤
使用接口来声明多个视图
在值对象的get方法上指定视图
在Controller方法上指定视图

/**
 * 用户实体类
 * @author ZhuPengWei
 */
public class User {
   // 用户的简单视图
   public interface UserSimpleView {};
   // 用户的复杂视图
   public interface UserDetailView extends UserSimpleView {};

   private String username;
   private String password;


   @JsonView(UserSimpleView.class)
   public String getUsername() {   return username;  }

   public void setUsername(String username) {   this.username = username;  }

   @JsonView(UserDetailView.class)
   public String getPassword() {   return password   }

   public void setPassword(String password) {   this.password = password;  }

}
// 返回一组用户信息
@RequestMapping(value= "/user",method= RequestMethod.GET)
@JsonView(User.UserSimpleView.class )
public List<User> query(){}   
// 返回单个用户的信息
@RequestMapping(value= "/user/{id : \\d+}",method= RequestMethod.GET)
@JsonView(User.UserDetailView.class )
public User getInfo(){}  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值