本地浏览器请求接口无法返回City表JSON数据,该如何调整代码?
问题修复方案
1. 实体类(City.java)字段映射修正
你数据库city表的城市名称字段为name,但现有实体类中映射的是city_name,会导致查询后城市名称字段为空,修改对应注解:
// 把原来的@Column(name="city_name")改成下面的 @Column(name = "name") String cityName;
2. 持久层(CityRepository.java)修正
Spring Data JPA的JpaRepository已经内置了基础CRUD方法,不需要自定义重复方法,且你现有自定义方法不符合JPA命名规则、缺少参数,直接删除自定义的两个方法即可:
package com.mfc.repository; import java.util.List; import org.springframework.data.jpa.repository.JpaRepository; import com.mfc.entity.City; public interface CityRepository extends JpaRepository<City, Integer>{ // 删除原有两个自定义方法,直接继承JpaRepository自带的findAll()、findById()等方法即可 }
3. 业务层(CityService.java)修正
- 调整调用Repository的方法为内置方法,修复传参报错问题
- 补充泛型声明,避免类型不安全警告
package com.mfc.admin.service; import java.util.List; import java.util.Optional; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.mfc.entity.City; import com.mfc.repository.CityRepository; @Service("cityService") public class CityService { @Autowired CityRepository cityRepository; // 变量名修改为语义更清晰的命名,原cityDTO也可正常运行 @Transactional public List<City> getAllCities() { return cityRepository.findAll(); // 调用JpaRepository自带的查询所有方法 } @Transactional public City getCity(int id) { Optional<City> cityOpt = cityRepository.findById(id); return cityOpt.orElse(null); // 不存在则返回空,也可按业务需求抛出异常 } }
4. 控制层(CityController.java)可选优化
补充泛型声明,提升代码规范性:
// 原有方法返回值List改为List<City> @RequestMapping(value="/getAllCities", method=RequestMethod.GET, headers = "Accept=application/json") public List<City> getCities() { logger.trace("CityController: getAllCities begins"); List<City> listOfCities = cityService.getAllCities(); logger.trace("CityController: getAllCities ends"); return listOfCities; }
5. 配置校验
确认你的项目配置文件(application.properties/application.yml)中存在以下配置,匹配你预期的访问路径:
server.port=8181 server.servlet.context-path=/mfc
如果没有配置context-path,你需要访问localhost:8181/city/getAllCities才能正常请求接口。
内容的提问来源于stack exchange,提问作者user15974221
相关产品推荐
相关产品推荐

