0

Java1.7を使用したSpringRestfulWebサービスを使用しています

fName、lName、address、currentTimeなどのgetter/setterメソッドを持つjsonマッパークラスがあります

現在、このクラスには以下の属性があります。

@JsonSerialize(include = Inclusion.NON_DEFAULT)

この属性のため、残りのWebサービスはデフォルト値を持つ属性を返しません。

これらの値を保持するには何をする必要がありますか?

インクルージョンをNON_NULLに設定すると機能しますが、currentTimeのみが必要なハートビートAPIで問題が発生します。

同じjasonマッパークラスでcurrentTimeのゲッター/セッターを取得しました。包含をNON_NULLに設定すると、他のすべての属性がデフォルト値で返されます。

RESTFulサービスでこれを処理するにはどうすればよいですか?ハートビートAPIと他のAPIのtime属性を返したいだけですが、すべての属性とデフォルト値が必要です。

どなたかご提案いただければ幸いです!!

更新:これが私のコードです:

Controller.java

@RequestMapping(value = "heartbeat", method = RequestMethod.GET, consumes="application/json")
public ResponseEntity<String> getHeartBeat() throws Exception {
    String curr_time = myService.getCurrentTime();      
    return MyServiceUtil.getResponse(curr_time, HttpStatus.OK);
}

@RequestMapping(value = "info", method = RequestMethod.POST, consumes="application/json")
public ResponseEntity<String> getData(@RequestBody String body) throws Exception {
    ....
    myInfo = myService.getMyInfo(myServiceJson);
    return MyServiceUtil.getResponse(myInfo, responseHeader, HttpStatus.OK);
}

MyService.java

@Override
public String getCurrentTime() throws Exception {
    String currentDateTime = null;
    MyServiceJson json = new MyServiceJson();
    ObjectMapper mapper = new ObjectMapper();

    try {           
        Date currDate = new Date(System.currentTimeMillis());
        currentDateTime = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss").format(currDate);           
        json.setCurrentDateTime(currentDateTime);

        ObjectWriter writer = mapper.writerWithView(Views.HeartBeatAPI.class);
        return writer.writeValueAsString(json);

    } catch (Exception e) {
        throw new Exception("Excpetion in getCurrentTime: ", HttpStatus.BAD_REQUEST);           
    }
}

@Override
public String getMyInfo(MyServiceJson myServiceJson) throws Exception {             
    MyServiceJson json = new MyServiceJson();
    json.setFirstName("hhh");
    json.setLastName("abc");

    ObjectMapper mapper = new ObjectMapper();
    return mapper.writeValueAsString(json);
}

Views.java

public class Views {
    public static class HeartBeatAPI {  }
}

MyServiceJson.java

@JsonSerialize(include = Inclusion.NON_NULL)
public class MyServiceJson {
    private int id;
    private String firstName;   
    private String lastName;

    @JsonView(Views.HeartBeatAPI.class) 
    private String currentDateTime;

    // Getter/Setter for the above variables here
    .....

}

ハートビートAPIを実行しても、デフォルト値である0としてid値を取得しています。

4

1 に答える 1

0

@JsonFilter または @JsonView の使用を検討することをお勧めします。

JsonFilter の使用

@JsonFilter("myBeanFilter")
public class MyBean implements Serializable {
    private String fName;
    private lName;
    private address;
    private Date currentTime;

    // Constructors, Getters/Setters
}

final MyBean bean = new MyBean();
final ObjectMapper mapper = new ObjectMapper();
final FilterProvider filters = new SimpleFilterProvider().addFilter("myBeanFilter",
    SimpleBeanPropertyFilter.filterOutAllExcept("currentTime"));
final String json = mapper.filteredWriter(filters).writeValueAsString(value);

JsonView の使用

public class Views {
    static class HeartbeatAPI { }
}

public class MyBean implements Serializable {
    private String fName;
    private lName;
    private address;

    @JsonView(Views.HeartbeatAPI.class)
    private Date currentTime;

    // Constructors, Getters/Setters
}

final MyBean bean = new MyBean();
final ObjectMapper mapper = new ObjectMapper().configure(
    SerializationConfig.Feature.DEFAULT_VIEW_INCLUSION, false);;
final ObjectWriter writer = mapper.writerWithView(Views.HeartbeatAPI.class);
final String json = writer.writeValueAsString(bean);

これらの方法どちらも、 を介してシリアル化プロセスを制御する必要がありますObjectMapper

于 2013-01-22T00:26:41.607 に答える