需求:根据商品id或者itemName查询商品详情
一个定义了若干个参数的接口,当客户端发起请求而携带的参数个数不确定时,为了能够正常响应,需要对接口做一个适配处理。
1.controller层开发
@Controller
@RequestMapping("/items")
public class ItemsController {
@Autowired
private ItemsServiceImpl itemsService;
//根据商品id或者itemName查询商品详情
@RequestMapping(value="/getItemByItemIdAndItemName",method = RequestMethod.POST)
@ResponseBody
public WebResult getItemByItemIdAndItemName(@RequestBody String itemsCustom)throws Exception{
WebResult result = WebResultHelper.newResult();
ItemsCustom items = JSON.parseObject(itemsCustom, ItemsCustom.class);
Items item = itemsService.getItemByItemIdAndItemName(items);
if(item == null){
return WebResultHelper.newErrorResult("没有查询到数据!");
}
result.put("data",item);
return result;
}
}
2.service层开发
//ItemsService
public interface ItemsService {
Items getItemByItemIdAndItemName(ItemsCustom itemsCustom) throws Exception;
}
//ItemsServiceImpl
@Service
public class ItemsServiceImpl implements ItemsService {
@Autowired
private ItemsMapperCustom itemsMapperCustom;
@Override
public Items getItemByItemIdAndItemName(ItemsCustom itemsCustom) throws Exception {
return itemsMapperCustom.getItemByItemIdAndItemName(itemsCustom);
}
}
3.dao层开发
//mapper接口
public interface ItemsMapperCustom {
Items getItemByItemIdAndItemName(ItemsCustom itemsCustom) throws Exception;
}
//sql映射文件
<mapper namespace="com.steven.ssm.mapper.ItemsMapperCustom" >
<select id="getItemByItemIdAndItemName" parameterType="itemsCustom" resultMap="queryItems">
select * from items
<where>
<if test="itemId!=null and itemId!=''">
and item_id = #{itemId}
</if>
<if test="itemName!=null and itemName!=''">
and item_name = #{itemName}
</if>
</where>
</select>
</mapper>
//pojo类
public class Items {
private Integer itemId;
private String itemName;
private Long itemPrice;
private String itemDetail;
private Date itemCreateDate;
//get和set方法......
}
4.测试
如截图所示,组合选择itemId和itemName作为请求参数都可以查询到相应的数据。