0

私はSpringが初めてで、Spring MVC4を使用しています。すべてのリクエストを受け取り、リクエスト内の複数のパラメーターを読み取り、最後にパラメーターに基づいてビジネス ロジックを適用し、データを JSON 形式で返す必要があります。

TestController.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;
}

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

しかし、Jsonにない出力を取得しています。ブラウザでの私の出力は..

ここに: 100 device_model nokia

それをJsonに変換する方法は?

4

7 に答える 7

3

JSON に自動変換されない文字列を返しています。次のようにします (@ResponseBody に注意し、Jackson が依存関係にあることを確認してください)。

 @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

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;

}

URL: 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

String を返す代わりに、 で注釈を付けたモデル 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

あなたの解決策は私には正しいようです。これが私にとってどのように機能するかです(注意@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 は、返されたものが implementation である限り、結果を JSON に変換しますSerializable

于 2015-06-04T11:31:49.583 に答える
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 ライブラリがあることを確認してください: クラスパスに jackson-core と jackson-databind

于 2015-06-04T11:32:31.727 に答える