2014-12-24 19 views
5

Spring Spring Spring Spring Uygulamam JSONObject öğesini döndürüyor. URL'ye erişirken, 406 hata sayfası alıyorum. Dize veya ArrayList döndürdüğümde çalışır.Bahar denetleyicisinden JSONObject döndürüyor 406 hatası veriyor

Bahar Denetleyici:

package com.mkyong.common.controller; 

import org.springframework.stereotype.Controller; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.ResponseBody; 
import java.util.ArrayList; 
import java.util.List; 
import java.util.logging.Level; 
import java.util.logging.Logger; 
import org.json.JSONException; 
import org.json.JSONObject; 

@Controller 
public class JSONController { 

    @RequestMapping("/test") 
    @ResponseBody 
    public JSONObject test() { 
     try { 
      JSONObject result = new JSONObject(); 
      result.put("name", "Dade") 
        .put("age", 23) 
        .put("married", false); 
      return result; 
     } catch (JSONException ex) { 
      Logger.getLogger(JSONController.class.getName()).log(Level.SEVERE, null, ex); 
     } 
     return null; 
    } 

} 

Nasıl bu sorunu çözebilir? Yardım için teşekkürler. Spring MVC’de yeniyim, mevcut SO cevaplarında bu konuya çözüm bulunamadı.

+0

Bunu deneyin işlevin dönüş değeri için yanıtın içerik türünü belirtmek gerek: "/ test" = (değer @ RequestMapping, yöntem = RequestMethod.GET, = "application üretir/json ") Daha iyi bir yanıt yazmak için işe yararsa bana bildirin –

+0

@JorgeGarita Çalışmıyor. Aynı cevap. –

+3

Spring MVC, JSON serisinden JSON serileştirme işlemini destekler JSONObject –

cevap

0

Bahar MVC'nin sizin için otomatik olarak zaten bir şey yaptığını elle yapmaya çalışıyorsunuz. Bahar otomatik olarak dönen türün bir temsilini çıkarır ve bir konuşma yapar. Bunu nasıl yapar http://spring.io/blog/2013/05/11/content-negotiation-using-spring-mvc'dan öğrenebilirsiniz. Durumunuzda JSON'a dönüşüyor.

i kaputun altında ne olur Dize veya ArrayList

Bahar MVC JSON dönüş türünü dönüştürmek için, Jackson kitaplığı kullanarak olmasıdır döndüğünüzde çalışır. Dize veya Liste türünü dönüştürme sorunu olmadığından, tüm işlemler tamam.

Gönderdiğiniz kodda ne olur, Jackson nesne eşleyicisi JSONObject örneğini JSON'a dönüştürmeye çalışır ve bu başarısız olur, çünkü jackson, JSONObject örneğinin olmadığı POJO nesnesinin beklemesine neden olur. Çalışmak için POJO'yu yazıp geri vermeniz gerekir. Yani

public class Person { 

    private String name; 
    private Integer age; 
    private Boolean married; 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public Integer getAge() { 
     return age; 
    } 

    public void setAge(Integer age) { 
     this.age = age; 
    } 

    public Boolean getMarried() { 
     return married; 
    } 

    public void setMarried(Boolean married) { 
     this.married = married; 
    } 
} 

ve var gibi bir şey senin yöntem hatası, örneğin Alıcılar ve ayarlayıcılar veya adı silmek eğer çalışma örnekte göreceksiniz aynı durum ilgilendiren Ne için

@RequestMapping("/test") 
    @ResponseBody 
    public Person test() { 
     Person person = new Person(); 
     person.setName("Dade"); 
     person.setAge(23); 
     person.setMarried(false); 
     return person; 
    } 

olarak değiştirildi Hepsini aç | Hepsini kapa Bu Sayfada Belirtiler yanlış bir şekilde, bir gösterime dönüştürmeye çalışırken bir istisna olur ve bir 406 hata alırsınız

+1

Aynı mantıkla giderseniz, bir Harita da POJO değildir. Bunu nasıl kare ediyorsunuz? –

0

Başlıkları @RequestMapping olarak ayarlamalı ve HashMap döndür.

@RequestMapping(value = "json", method = RequestMethod.GET, headers = "Accept=application/json") 
public @ResponseBody 
Map<String, String> helloJson() { 
    HashMap<String, String> map = new HashMap<String, String>(); 
    map.put("k1", "v1"); 
    map.put("k2", "v2"); 
    map.put("k3", "v3"); 
    return map; 
}