0

我是 Spring 新手,我正在使用 Spring MVC4。我必须接收所有请求,读取请求中的多个参数,最后根据参数应用业务逻辑并以 JSON 格式返回数据。

测试控制器.java:

@RequestMapping(value="/receiveUpdatedStressScore",params = { "value", "device_model"},method=RequestMethod.GET, produces={"application/json"})
public String receiveUpdatedStressScore(@RequestParam(value="value")  int value,@RequestParam(value="device_model") String device_model)
{
      return "Here: "+value+" device_model "+device_model;
}

网址:http://localhost:8080/appname/receiveUpdatedStressScore?value=100&device_model=nokia

但我得到的输出不在 Json 中。我在浏览器中的输出是..

此处:100 device_model 诺基亚

如何将其转换为 Json?

4

7 回答 7

3

您正在返回一个不会自动转换为 JSON 的字符串。做这样的事情(注意@ResponseBody 并确保你有杰克逊作为依赖):

 @RequestMapping(value="/receiveUpdatedStressScore")
public @ResponseBody Device receiveUpdatedStressScore(@RequestParam(value="value") int value,@RequestParam(value="device_model") String deviceModel)

{ 
    Device device = new Device();
    device.setDeviceModel(deviceModel);
    device.setValue(value);
    return device; 
}

public class Device {
    int value;
    String deviceModel;
    public int getValue() {
        return value;
    }
    public void setValue(int value) {
        this.value = value;
    }
    public String getDeviceModel() {
        return deviceModel;
    }
    public void setDeviceModel(String deviceModel) {
        this.deviceModel = deviceModel;
    }

}
于 2015-06-04T11:40:38.620 回答
0

您的解决方案对我来说是正确的。这就是它对我的工作方式(注意@ResponseStatus

@ResponseStatus(HttpStatus.OK)
@RequestMapping(value = "/nearbyStudios", method = RequestMethod.GET, produces = { "application/json" })
public List<NearbyStudio> getNearbyStudios(Float latitude, Float longitude, Float radius) {
    return mapDao.getNearbyStudios(latitude, longitude, radius);
}

如果这不起作用,您的问题可能在其他地方。只要您返回的内容,Spring 就会为您将结果转换为 JSON Serializable

于 2015-06-04T11:31:49.583 回答
0

Json 是 JavaScript Object Notation。它应该是特定的格式。您将在下面的链接中找到更多关于 json 的信息。

http://www.w3schools.com/json/

在您的情况下,返回的字符串应采用以下格式。

{
    "value": "100",
    "device_model": "nokia"
}

您可以在下面的链接中验证您的 json。

http://jsonlint.com/

如果 Stefan Falk 回答,此produces = { "application/json" }代码将返回特定模型对象的 json。在您的情况下,我没有看到任何模型对象。

于 2015-06-04T11:35:57.327 回答
0

一旦我应用业务逻辑并返回模型而不仅仅是参数值本身,我的问题就解决了。当我返回模型时,Jackson 将模型对象转换为 json 进行了所有必要的处理。

这是我更新的代码:

@RequestMapping(value="/receiveUpdatedStressScore",params = { "value", "device_model" },method=RequestMethod.GET,produces={"application/json"})

public StressScore receiveUpdatedStressScore(@RequestParam(value="value")  Short value,@RequestParam(value="device_model") String device_model)
{

    StressScore s=new StressScore();
    s.setScore(value);
    s.setDevice_model(device_model);


    return s;

}

网址: http://localhost:8080/appname/receiveUpdatedStressScore?value=100&device_model=nokia

在浏览器中输出:

{"device_model":"nokia","api_key":null,"time":0,"score":100}

非常感谢。

于 2015-06-04T11:42:24.893 回答
0

与其返回一个字符串,不如返回一个用 . 注释的模型 bean @ResponseBody。这将确保响应是格式正确的 JSON

像下面的东西

@RequestMapping(value="/receiveUpdatedStressScore",params = { "value", "device_model"},method=RequestMethod.GET, produces={"application/json"})
public @ResponseBody MyBean receiveUpdatedStressScore(@RequestParam(value="value")  int value,@RequestParam(value="device_model") String device_model)
{
      MyBean mb= new MyBean();
       mb.setValue(value);
       mb.setDevice_model(device_model);
      return mb;
}
于 2015-06-04T11:44:23.967 回答
0

你可以这样做:

在控制器上:

@RequestMapping(value="/receiveUpdatedStressScore",params = { "value",
"device_model"},method=RequestMethod.GET, produces={"application/json"})
public String receiveUpdatedStressScore(@RequestParam(value="value")  
 int     value,@RequestParam(value="device_model") String device_model)
{
  return "{Here: "+value+", device_model: "+device_model + "}";
}

在客户端:

function receiveUploadedStressScore(){
   $http.get("/receiveUpdatedStressScore?value=100&device_model=nokia")
    .success(function(data){
   var jsonObj = $.parseJSON(data.content);
  });
}
于 2016-08-16T08:55:22.857 回答
-1

您需要在方法返回之前放置注释@ResponseBody,例如:

@RequestMapping(value="/receiveUpdatedStressScore",params = { "value", "device_model"},method=RequestMethod.GET, produces={"application/json"})

public @ResponseBody String receiveUpdatedStressScore(@RequestParam(value="value") int  value,@RequestParam(value="device_model") String device_model){ 
return "Here: "+value+" device_model "+device_model; 

}

http://docs.spring.io/spring/docs/current/spring-framework-reference/html/mvc.html#mvc-ann-responsebody

还要确保在你的类路径中你有杰克逊库:你的类路径中的 jackson-core 和 jackson-databind

于 2015-06-04T11:32:31.727 回答